ArgoCD
ArgoCD is a Kubernetes controller that keeps a cluster equal to what a Git repository says. The Web App Blueprint runs one ArgoCD per EKS cluster, pointed at the acme-aws-blueprint-webapp-gitops repository. A deployment is a merged pull request, not a kubectl command.
What it does
An ArgoCD Application names a Git repository, a path and a target revision, and a destination namespace. ArgoCD renders the manifests (here with Helm), compares them with the live cluster and reports the difference. With automated sync it applies the difference itself; without it, a person presses Sync. Prune removes objects that left Git; self-heal reverts changes made outside Git.
How BuiltForProd uses it
The argocd unit in acme-aws-blueprint-webapp-infra installs the argo-cd Helm chart (version 9.5.22) into the argocd namespace and creates everything ArgoCD needs:
- Repository access through the existing
acme-runnerGitHub App. The module reads the App id, installation id and private key from Parameter Store in the automation account through theacme-ssm-cross-accountrole and stores them in a repository Secret. No deploy key or personal token is involved. - One Application,
blueprint-app, trackingmain, pathblueprint-app/helm, with value files layeredvalues.yaml,values-<stage>.yaml,../envs/<stage>/values.yaml. It uses server-side apply and ignores the fields the External Secrets Operator rewrites on an ExternalSecret. - Sync policy per stage from the stage stack file: dev and staging have
automatedsync with prune and self-heal; prod hasargocd_auto_sync = falseand needs a manual sync after the deploy pull request is merged. - High availability in staging and prod (
argocd_ha = true): two replicas of the controller, server, repo server and ApplicationSet controller, a PodDisruptionBudget each, and the chart'sredis-hain place of a single Redis. This is why those stages run three nodes. - Access at
argocd.<internal domain>, such asargocd.dev.internal.company.com, over the VPN. The server runs as a ClusterIP service with--insecure, behind an internal Application Load Balancer that the AWS Load Balancer Controller builds from the chart's Ingress: HTTPS on 443 with the stage's internal ACM certificate, theinternal-toolsIngress group, and inbound restricted to the private address ranges. The internal ExternalDNS release writes the record. - The
ClusterSecretStorenamedaws-ssmfor the External Secrets Operator is also created here, so it exists in its own state after the operator's CRDs are ready.
The other half of the loop is in acme-aws-blueprint-webapp-code. Its workflows never push to the GitOps repository; each opens a pull request that sets image.repository and image.tag in envs/<stage>/values.yaml. Dev and staging pull requests auto-merge; the prod pull request is merged by a person. ArgoCD then syncs. Rollback is a revert of that pull request.
Terms you will see
| Term | Meaning |
|---|---|
| Application | The ArgoCD object tying a Git path to a cluster namespace. |
| Sync | Applying the rendered manifests to the cluster. |
| Prune | Deleting live objects that no longer exist in Git. |
| Self-heal | Reverting live changes that were not made through Git. |
| Target revision | The branch or tag ArgoCD follows, here main. |
Where to read more
- GitOps for the model
- Web App Blueprint overview
- Helm for the chart ArgoCD renders
- GitHub Actions for the workflows that open the pull requests