Deliver catalog with GitOps
The catalog service is currently running as part of the base application, applied directly with kubectl. We'll now hand ownership of it to Argo CD so it's delivered from Git instead. Two declarative steps make that happen: register a deployment target, then create an Application.
Register the cluster as a deployment target
The managed Argo CD capability doesn't deploy to the local cluster automatically — you register it explicitly, and it's identified by its EKS cluster ARN rather than the usual in-cluster API URL. We register it under the conventional name in-cluster.
The capability auto-created an EKS access entry for its IAM Capability Role during prepare-environment, and the role is associated with the cluster-admin access policy, so Argo CD already has the Kubernetes permissions it needs to sync.
# manifests/modules/fastpaths/eks-capabilities/argocd/cluster.yaml
apiVersion: v1
kind: Secret
metadata:
name: in-cluster
namespace: argocd
labels:
argocd.argoproj.io/secret-type: cluster
stringData:
name: in-cluster
server: $EKS_CLUSTER_AUTO_ARN
project: default
- The
argocd.argoproj.io/secret-type: clusterlabel tells Argo CD this Secret describes a deployment target. - The target is identified by the cluster ARN (
$EKS_CLUSTER_AUTO_ARN), nothttps://kubernetes.default.svc.
Apply it, resolving the cluster ARN with envsubst:
secret/in-cluster created
Create the catalog Application
Now define an Argo CD Application that points at the seeded CodeCommit repository. Because the IAM Capability Role grants codecommit:GitPull, Argo CD reads the repository directly by its HTTPS URL — there's no repository Secret, no SSH key, and no Git credential helper to configure.
# manifests/modules/fastpaths/eks-capabilities/argocd/application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: catalog
namespace: argocd
spec:
project: default
source:
repoURL: $EKS_CAP_CODECOMMIT_URL
targetRevision: main
path: catalog
destination:
name: in-cluster
namespace: catalog
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
repoURLis the CodeCommit HTTPS endpoint ($EKS_CAP_CODECOMMIT_URL);path: catalogselects the manifests directory in the repo.destination.name: in-clustermatches the deployment target we just registered.syncPolicy.automatedwithpruneandselfHealmakes Argo CD continuously reconcile the cluster to match Git.
Before Argo CD adopts catalog, remove the copy the base application applied with kubectl so there's a single owner of the namespace:
namespace "catalog" deleted
Apply the Application, resolving the repository URL with envsubst:
application.argoproj.io/catalog created
Argo CD picks up the new Application, pulls the manifests from CodeCommit, creates the catalog namespace, and deploys the workloads. Trigger an immediate refresh so we don't wait on the default ~3-minute poll, then wait for it to report both Synced and Healthy:
application.argoproj.io/catalog annotated
application.argoproj.io/catalog condition met
application.argoproj.io/catalog condition met
Inspect the Application's status:
Synced/Healthy
Confirm the workloads Argo CD deployed are running:
deployment "catalog" successfully rolled out
NAME READY STATUS RESTARTS AGE
catalog-7d9f4c5b8d-abcde 1/1 Running 0 90s
catalog-mysql-0 1/1 Running 0 90s
You can also see it on Argo CD UI

The catalog service is now delivered by GitOps. Any change pushed to the CodeCommit repository will be reconciled to the cluster automatically — which we'll see next.