# Deployment Guide
## Initial Setup
1. **Deploy 3 Tenants in the Platform**:
- Deploy one tenant in each tier. Note that the `pool-1` environment is already deployed.
- Create new versions of Helm Charts and images to demonstrate updates already deployed.
2. **Get SQS Queues URL to Provision the Tenants**:
```bash
export QUEUE_PREFIX="argoworkflows-"
for queue in $(aws sqs list-queues --queue-name-prefix "$QUEUE_PREFIX" --output text --query 'QueueUrls[]'); do
queue_name=$(echo "$queue" | awk -F/ '{print $NF}' | sed "s/^$QUEUE_PREFIX//")
queue_env_var="ARGO_WORKFLOWS_$(echo "$queue_name" | tr '-' '_' | tr '[:lower:]' '[:upper:]')_SQS_URL"
export "$queue_env_var"="$queue"
done-
Open Argo Workflows:
ARGO_WORKFLOW_URL=$(kubectl -n argo-workflows get service/argo-workflows-server -o json | jq -r '.status.loadBalancer.ingress[0].hostname') echo http://$ARGO_WORKFLOW_URL:2746/workflows
-
Onboard 3 Tenants, One in Each Tier:
aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_ONBOARDING_QUEUE_SQS_URL \ --message-body '{ "tenant_id": "tenant-1", "tenant_tier": "premium", "release_version": "0.0" }' aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_ONBOARDING_QUEUE_SQS_URL \ --message-body '{ "tenant_id": "tenant-2", "tenant_tier": "basic", "release_version": "0.0" }' aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_ONBOARDING_QUEUE_SQS_URL \ --message-body '{ "tenant_id": "tenant-3", "tenant_tier": "advanced", "release_version": "0.0" }' -
Export Application LoadBalancer to Test Tenants:
# Export Application Endpoint APP_LB=http://$(kubectl get ingress -n tenant-1 -o json | jq -r .items[0].status.loadBalancer.ingress[0].hostname)
-
Show CodeCommit Repository for GitOps, Explore Add-Ons, Infra, and Everything:
- Mention that we already have onboarded 3 tenants in different tiers.
- Show commits where we can show that we have added new tenants.
- On Cloud9, show all assets that flux is reconciling:
flux get all
-
Get Tenant Environments and Show the Tenants That We Have Deployed:
flux get helmreleases | grep -i 0.0.1 -
Deploy New Tenant-4 Model Premium to Show Creating of New Resources:
aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_ONBOARDING_QUEUE_SQS_URL \ --message-body '{ "tenant_id": "tenant-4", "tenant_tier": "premium", "release_version": "0.0" }' -
After Deployment Kicks In, Explore Various Tenants:
-
Explore Tenant-1 Premium:
kubectl get all -ntenant-1 curl -s -H "tenantID: tenant-1" $APP_LB/producer | jq curl -s -H "tenantID: tenant-1" $APP_LB/consumer | jq
-
Explore Tenant-2 Basic:
kubectl get all -ntenant-2 kubectl get all -npool-1 | grep -i tenant-2 curl -s -H "tenantID: tenant-2" $APP_LB/producer | jq curl -s -H "tenantID: tenant-2" $APP_LB/consumer | jq
-
Tenant-3 Advanced:
kubectl get all -ntenant-3 kubectl get all -npool-1 | grep -i tenant-3 curl -s -H "tenantID: tenant-3" $APP_LB/producer | jq curl -s -H "tenantID: tenant-3" $APP_LB/consumer | jq
-
- Show Terraform Logs for Tenant-4
-
Deploy Patch Version:
-
Mention that you've already created a new chart version with the only change being the producer microservice version.
-
Registry login and push new Helm version to ECR:
export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws ecr get-login-password --region $AWS_REGION | helm registry login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com helm push helm-tenant-chart-0.0.2.tgz \ oci://$ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/gitops-saas aws ecr list-images --repository-name gitops-saas/helm-tenant-chart
-
Show patch being reconciled automatically because of wildcard:
watch -n1 -d flux get helmreleases
-
Test Microservices:
curl -s -H "tenantID: tenant-1" $APP_LB/producer | jq curl -s -H "tenantID: tenant-2" $APP_LB/producer | jq curl -s -H "tenantID: tenant-3" $APP_LB/producer | jq curl -s -H "tenantID: tenant-4" $APP_LB/producer | jq
-
-
Deploy Major Version:
- Show uncommenting Helm chart values, update chart version, and push package to ECR.
- Uncomment Terraform for payments, tag commit, and push tag with new TF version.
- Uncomment Tenant Tier Templates on GitOps folder
- Trigger pipeline to deploy across all the tenants:
aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_DEPLOYMENT_QUEUE_SQS_URL \ --message-body '{ "tenant_tier": "basic", "release_version": "1.0" }' aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_DEPLOYMENT_QUEUE_SQS_URL \ --message-body '{ "tenant_tier": "advanced", "release_version": "1.0" }' aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_DEPLOYMENT_QUEUE_SQS_URL \ --message-body '{ "tenant_tier": "premium", "release_version": "1.0" }'
-
Offboarding:
aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_OFFBOARDING_QUEUE_SQS_URL \ --message-body '{ "tenant_id": "tenant-4", "tenant_tier": "premium" }' aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_OFFBOARDING_QUEUE_SQS_URL \ --message-body '{ "tenant_id": "tenant-1", "tenant_tier": "premium" }' aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_OFFBOARDING_QUEUE_SQS_URL \ --message-body '{ "tenant_id": "tenant-2", "tenant_tier": "basic" }' aws sqs send-message \ --queue-url $ARGO_WORKFLOWS_OFFBOARDING_QUEUE_SQS_URL \ --message-body '{ "tenant_id": "tenant-3", "tenant_tier": "advanced" }'
This Markdown structure organizes your steps and commands in a clear, readable format. Adjust any headings or details as needed for your specific needs!