registry-migration
Skill139 starsChanged 6 months agoApache-2.0View on GitHub
Migrates container images from Amazon Elastic Container Registry (ECR) to Google Artifact Registry. Use when the user asks to "migrate ECR to Artifact Registry", "set up image registries on Google Cloud", or as Phase 3 of a Google Kubernetes Engine (GKE) migration.
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- geoffsdesk/portageedited, first seen May 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- geoffsdesk/portage★ 023% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository45 other files it gives its agents.
- spanner-provisioningSkill
- ad-copywritingSkill
- brand-strategySkill
- platform-specsSkill
- trend-analysisSkill
- video-storytellingSkill
- visual-directionSkill
- ad-copywritingSkill
- brand-strategySkill
- platform-specsSkill
- trend-analysisSkill
- video-storytellingSkill
- visual-directionSkill
- code-reviewSkill
- documentationSkill
- idea-to-appSkill
- open-prSkill
- pre-commitSkill
- security-scanSkill
- unit-testsSkill
- modernize-dotnet-cloudrunSkill
- legacy-app-generatorSkill
- app-migration-executionSkill
- app-migration-orchestratorSkill
- identity-translationSkill
- network-translationSkill
- observability-translationSkill
- storage-translationSkill
- workload-translationSkill
- ingress2gatewaySkill
- eks-discoverySkill
- gke-landing-zoneSkill
- identity-translationSkill
- migration-assessmentSkill
- network-translationSkill
- observability-translationSkill
- platform-orchestratorSkill
- storage-translationSkill
- validationSkill
- bigframes-bqmlSkill
- model-evaluationSkill
- pipeline-generatorSkill
- spark-lightning-optimizationSkill
- unified-model-registrySkill
- zero-copy-ingestionSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 28
Every container image referenced from any Kubernetes workload has to be reachable from GKE — preferably from a regional Artifact Registry — …
- Distinctive: line 42
Failure Handling: If any of these tools are missing or authentication fails, inform the user and request they install the tools or …
- Very specific: line 77
Filter Application Images: Ensure that you strictly migrate application workload images.
- Very specific: line 82
Run the image migration script to copy images while preserving digests and generate the mapping file.
- Distinctive: line 94
CodeBuild / CodePipeline: add a parallel push step that pushes to AR using a service account key or, preferably, federated identity into …
- Very specific: line 97
Tekton: add a second image-push task targeting AR.
- Distinctive: line 139
Every image referenced by any translated workload exists in AR with matching digest.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Registry Migration
<!--
Disabling markdownlint MD029 to provide explicit ordering to avoid
confusing the LLM.
--><!-- markdownlint-disable MD029 --><!--
Disabling markdownlint MD030 to allow the list overflowing to numbers
>=10.
--><!-- markdownlint-disable MD030 -->You move container images from ECR to Artifact Registry, set up vulnerability scanning, update build pipelines, and produce a mapping file the rest of the orchestration uses to rewrite image references.
Purpose
Every container image referenced from any Kubernetes workload has to be reachable from GKE — preferably from a regional Artifact Registry — at low latency, with vulnerability scanning, and, when in scope, with Binary Authorization attestations.
Prerequisites
- Context Dependencies:
platform-handoff.jsonand01-discovery/inventory.jsonmust exist in the<RUN_DIR>. - Infrastructure:
03-landing-zone/plan.mdwith theartifact-registryshared project provisioned. - Tools:
gcloud,aws,gcrane, andjqmust be installed. - Authentication: Credentials for both AWS ECR and Google Artifact Registry must be configured.
- Failure Handling: If any of these tools are missing or authentication fails, inform the user and request they install the tools or authenticate before proceeding.
Procedure
Step 1 — Plan the Artifact Registry (AR) repo layout
Default layout:
projects/artifact-registry/locations/<region>/repositories/<repo-name> Naming:
one AR repository per ECR repository, same name. Multi-region repos for global
distribution if cross-region pulls matter.
Decide repo format:
- Standard repository: contains images directly. One per environment and team is the typical shape.
- Virtual repository: aggregates upstream registries.
- Remote repository: mirrors a single upstream such as Docker Hub or NPM.
For this migration:
- Plan a standard AR repo per ECR repo, in the user's primary region, for
example,
us-central1. - Plan a remote repo for
docker.ioandquay.ioif the workloads pull public images directly.
Step 2 — Provision AR repos
Generate Terraform per repo into <OUTPUT_DIR>/terraform/artifact-registry.tf
using the template provided in assets/artifact-registry.tf.template, which is
relative to this skill's directory.
Step 3 — Mirror images and build the mirror plan
- Filter Application Images: Ensure that you strictly migrate application
workload images. Do NOT migrate proprietary AWS infrastructure images such
as
kube-proxy,aws-ebs-csi-driver,aws-load-balancer-controller,amazon-k8s-cni, orkarpenter. These must be filtered out as GKE uses its own managed components. Run the image migration script to copy images while preserving digests and generate the mapping file. Replace
<SKILL_DIR>with the absolute path to this skill:<SKILL_DIR>/scripts/migrate_images.sh <RUN_DIR> <OUTPUT_DIR> [aws_profile]
Step 4 — Update build pipelines
For each upstream pipeline, plan a dual-push co-existence period:
- CodeBuild / CodePipeline: add a parallel push step that pushes to AR using a service account key or, preferably, federated identity into Google Cloud.
- Cloud Build / Cloud Deploy: built-in push to AR.
- Tekton: add a second
image-pushtask targeting AR.
Produce a checklist <OUTPUT_DIR>/pipelines.md listing every pipeline, the
change to make, and the verification step.
Step 5 — Vulnerability scanning + Binary Authorization
Enable Artifact Analysis on the AR project. Surface findings in
<OUTPUT_DIR>/vuln-baseline.md.
For Binary Authorization, when in scope:
- Plan an attestor in
<OUTPUT_DIR>/binauthz/. - Plan an attestation policy on the cluster, starting in
EVALUATIONmode. - Wire CI to attest on push, for example, using Cloud Build built-in support or
cosign sign.
Step 6 — Cutover and decommission plan
Produce <OUTPUT_DIR>/ecr-decommission.md:
- Per-repo decommission date, default to 30 days post final cutover.
- Final image archive plan.
- IAM cleanup plan.
Decision points
| Decision | Default | When to deviate |
| AR repo structure | One AR repo per ECR repo | Restructure if ECR layout was painful |
| Region | Same region as primary GKE | Multi-region replication for >2 regions |
| Pull-through caches | docker.io, quay.io | Skip if you mirror everything explicitly |
| Cleanup policy | Keep 100 + delete untagged > 30d | Tighter, such as 10 most recent, for non-prod |
| Binary Authorization | EVALUATION mode initially | ENFORCE mode only after >2 weeks cleanly |
Outputs / Deliverables
The output artifacts correspond to the inline steps above. Ensure they are
placed in <OUTPUT_DIR>.
Validation
- Every image referenced by any translated workload exists in AR with matching digest.
gcloud container images describe <full-ref>succeeds for every image inimage-map.json.- A test pod on GKE successfully pulls a representative image without auth
issues, for example, KSA → GSA with
roles/artifactregistry.readeron the AR project.
Escalation triggers
- ECR images in repos using lifecycle rules whose retention exceeds AR cleanup policies.
- Images larger than AR's per-image limits.
- Cross-cloud egress costs from initial mirror exceed tolerance.
- ECR repos referenced by workloads in another AWS account.
Common pitfalls
- Pushing without preserving digests. Re-built images get new digests and break digest-pinned deployments.
- Forgetting Workload Identity → AR reader. GSAs that pull from AR need
roles/artifactregistry.reader. - Pipelines that hardcode AWS region in image refs.
- Pull-through caches that tag-pin.
- Not seeding the cache.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

