Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Replica le immagini filtrate dei container Amazon ECR tra account o regioni
Creato da Abdal Garuba (AWS)
Ambiente: produzione | Tecnologie: contenitori e microservizi; DevOps | Servizi AWS: Amazon EC2 Container Registry; Amazon; AWS CodeBuild; CloudWatch AWS Identity and Access Management; AWS CLI |
Riepilogo
Amazon Elastic Container Registry (Amazon ECR) Elastic Container Registry (Amazon ECR) può replicare tutte le immagini dei container in un repository di immagini tra regioni Amazon Web Services (AWS) e account AWS in modo nativo, utilizzando le funzionalità di replica tra regioni e account. (Per ulteriori informazioni, consulta il post sul blog di AWS La replica interregionale in Amazon ECR è arrivata
Questo modello descrive come replicare le immagini dei container archiviate in Amazon ECR su account e regioni AWS, in base a modelli di tag di immagine. Il pattern utilizza Amazon CloudWatch Events per ascoltare gli eventi push per le immagini che hanno un tag personalizzato predefinito. Un evento push avvia un CodeBuild progetto AWS e gli trasmette i dettagli dell'immagine. Il CodeBuild progetto copia le immagini dal registro Amazon ECR di origine al registro di destinazione in base ai dettagli forniti.
Questo modello copia le immagini con tag specifici tra gli account. Ad esempio, puoi utilizzare questo modello per copiare solo immagini sicure e pronte per la produzione nell'account AWS di produzione. Nell'account di sviluppo, dopo aver testato a fondo le immagini, puoi aggiungere un tag predefinito alle immagini sicure e utilizzare i passaggi indicati in questo schema per copiare le immagini contrassegnate nell'account di produzione.
Prerequisiti e limitazioni
Prerequisiti
Un account AWS attivo per i registri Amazon ECR di origine e destinazione
Autorizzazioni amministrative per gli strumenti utilizzati in questo modello
Docker
installato sul computer locale per il test AWS Command Line Interface (AWS CLI), per l'autenticazione in Amazon ECR
Limitazioni
Questo modello controlla gli eventi push del registro di origine in una sola regione AWS. Puoi distribuire questo pattern in altre regioni per controllare i registri in quelle regioni.
In questo modello, una regola di Amazon CloudWatch Events ascolta un singolo modello di tag di immagine. Se desideri verificare la presenza di più pattern, puoi aggiungere eventi per ascoltare altri modelli di tag di immagine.
Architettura
Architettura Target
![Architettura per la replica di immagini filtrate di container Amazon ECR tra account e regioni.](images/pattern-img/a0f635e4-3ba5-4411-b9f8-54cfc228535a/images/2cb7962d-5b45-41a2-ba8c-7a18f01b617a.png)
Automazione e scalabilità
Questo modello può essere automatizzato con uno script Infrastructure as Code (IaC) e distribuito su larga scala. Per utilizzare i CloudFormation modelli AWS per implementare questo modello, scarica l'allegato e segui le istruzioni nella sezione Informazioni aggiuntive.
Puoi indirizzare più CloudWatch eventi Amazon Events (con diversi modelli di eventi personalizzati) allo stesso CodeBuild progetto AWS per replicare più pattern di tag di immagine, ma dovrai aggiornare la convalida secondaria nel buildspec.yaml
file (incluso nell'allegato e nella sezione Strumenti) come segue per supportare più modelli.
... if [[ ${IMAGE_TAG} != release-* ]]; then ...
Strumenti
Servizi Amazon
IAM
: AWS Identity and Access Management (IAM) consente di gestire l'accesso ai servizi e alle risorse AWS in modo sicuro. In questo modello, è necessario creare il ruolo IAM tra account diversi che AWS CodeBuild assumerà quando invia le immagini dei container al registro di destinazione. Amazon ECR
— Amazon Elastic Container Registry (Amazon ECR) è un registro di container completamente gestito che semplifica l'archiviazione, la gestione, la condivisione e la distribuzione di immagini e artefatti dei container ovunque. Le azioni di invio di immagini al registro di origine inviano i dettagli degli eventi di sistema al bus degli eventi che viene raccolto da Amazon CloudWatch Events. AWS CodeBuild
: AWS CodeBuild è un servizio di integrazione continua completamente gestito che fornisce potenza di calcolo per eseguire lavori come la compilazione del codice sorgente, l'esecuzione di test e la produzione di artefatti pronti per essere distribuiti. Questo modello utilizza AWS CodeBuild per eseguire l'azione di copia dal registro Amazon ECR di origine al registro di destinazione. CloudWatch Eventi: Amazon CloudWatch Events offre un flusso di eventi di sistema che descrivono i cambiamenti nelle risorse AWS. Questo modello utilizza regole per abbinare le azioni push di Amazon ECR a uno schema di tag di immagine specifico.
Strumenti
Docker CLI
: Docker è uno strumento che semplifica la creazione e la gestione dei container. I container racchiudono un'applicazione e tutte le sue dipendenze in un'unica unità o pacchetto che può essere facilmente distribuito su qualsiasi piattaforma che supporti il runtime del contenitore.
Codice
È possibile implementare questo modello in due modi:
Configurazione automatizzata: distribuisci i due CloudFormation modelli AWS forniti nell'allegato. Per istruzioni, consulta la sezione Informazioni aggiuntive.
Configurazione manuale: segui i passaggi nella sezione Epics.
Esempio: buildspec.yaml
Se utilizzi i CloudFormation modelli forniti con questo modello, il buildspec.yaml
file viene incluso nelle risorse. CodeBuild
version: 0.2 env: shell: bash phases: install: commands: - export CURRENT_ACCOUNT=$(echo ${CODEBUILD_BUILD_ARN} | cut -d':' -f5) - export CURRENT_ECR_REGISTRY=${CURRENT_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com - export DESTINATION_ECR_REGISTRY=${DESTINATION_ACCOUNT}.dkr.ecr.${DESTINATION_REGION}.amazonaws.com pre_build: on-failure: ABORT commands: - echo "Validating Image Tag ${IMAGE_TAG}" - | if [[ ${IMAGE_TAG} != release-* ]]; then aws codebuild stop-build --id ${CODEBUILD_BUILD_ID} sleep 60 exit 1 fi - aws ecr get-login-password --region ${AWS_REGION} | docker login -u AWS --password-stdin ${CURRENT_ECR_REGISTRY} - docker pull ${CURRENT_ECR_REGISTRY}/${REPO_NAME}:${IMAGE_TAG} build: commands: - echo "Assume cross-account role" - CREDENTIALS=$(aws sts assume-role --role-arn ${CROSS_ACCOUNT_ROLE_ARN} --role-session-name Rolesession) - export AWS_DEFAULT_REGION=${DESTINATON_REGION} - export AWS_ACCESS_KEY_ID=$(echo ${CREDENTIALS} | jq -r '.Credentials.AccessKeyId') - export AWS_SECRET_ACCESS_KEY=$(echo ${CREDENTIALS} | jq -r '.Credentials.SecretAccessKey') - export AWS_SESSION_TOKEN=$(echo ${CREDENTIALS} | jq -r '.Credentials.SessionToken') - echo "Logging into cross-account registry" - aws ecr get-login-password --region ${DESTINATION_REGION} | docker login -u AWS --password-stdin ${DESTINATION_ECR_REGISTRY} - echo "Check if Destination Repository exists, else create" - | aws ecr describe-repositories --repository-names ${REPO_NAME} --region ${DESTINATION_REGION} \ || aws ecr create-repository --repository-name ${REPO_NAME} --region ${DESTINATION_REGION} - echo "retag image and push to destination" - docker tag ${CURRENT_ECR_REGISTRY}/${REPO_NAME}:${IMAGE_TAG} ${DESTINATION_ECR_REGISTRY}/${REPO_NAME}:${IMAGE_TAG} - docker push ${DESTINATION_ECR_REGISTRY}/${REPO_NAME}:${IMAGE_TAG}
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un ruolo CloudWatch Events. | Nell'account AWS di origine, crea un ruolo IAM da far assumere ad Amazon CloudWatch Events. Il ruolo deve disporre delle autorizzazioni necessarie per avviare un CodeBuild progetto AWS. Per creare il ruolo utilizzando la CLI di AWS, segui le istruzioni nella documentazione IAM. Esempio di trust policy (
Esempio di politica di autorizzazione (
| Amministratore AWS, AWS DevOps, amministratore di sistema AWS, amministratore cloud, architetto cloud, DevOps ingegnere |
Crea un CodeBuild ruolo. | Crea un ruolo IAM da CodeBuild far assumere ad AWS seguendo le istruzioni nella documentazione IAM. Il ruolo deve avere le seguenti autorizzazioni:
Esempio di politica di fiducia (
Esempio di politica di autorizzazione (
Allega la policy gestita
| Amministratore AWS, AWS DevOps, amministratore di sistema AWS, amministratore cloud, architetto cloud, DevOps ingegnere |
Crea un ruolo tra account. | Nell'account AWS di destinazione, crea un ruolo IAM per il CodeBuild ruolo AWS per l'account di origine da assumere. Il ruolo tra account diversi dovrebbe consentire alle immagini dei container di creare un nuovo repository e di caricare le immagini dei container su Amazon ECR. Per creare il ruolo IAM utilizzando la CLI AWS, segui le istruzioni nella documentazione IAM. Per consentire il CodeBuild progetto AWS della fase precedente, utilizza la seguente policy di fiducia:
Per consentire al CodeBuild progetto AWS del passaggio precedente di salvare le immagini nel registro di destinazione, utilizza la seguente politica di autorizzazione:
| Amministratore AWS, AWS DevOps, amministratore del cloud, architetto del cloud, DevOps ingegnere, amministratore di sistema AWS |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un CodeBuild progetto. | Crea un CodeBuild progetto AWS nell'account di origine seguendo le istruzioni nella CodeBuild documentazione AWS. Il progetto dovrebbe trovarsi nella stessa regione del registro di origine. Configura il progetto come segue:
| Amministratore AWS, AWS DevOps, amministratore di sistema AWS, amministratore cloud, architetto cloud, DevOps ingegnere |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea una regola per gli eventi. | Poiché il pattern utilizza la funzionalità di filtraggio dei contenuti, devi creare l'evento utilizzando Amazon EventBridge. Crea l'evento e il target seguendo le istruzioni nella EventBridge documentazione, con alcune modifiche:
| Amministratore AWS, AWS DevOps, amministratore di sistema AWS, amministratore cloud, architetto cloud, DevOps ingegnere |
Attività | Descrizione | Competenze richieste |
---|---|---|
Effettua l'autenticazione con Amazon ECR. | Effettua l'autenticazione nei registri di origine e di destinazione seguendo i passaggi indicati nella documentazione di Amazon ECR. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS, amministratore cloud, DevOps ingegnere, architetto cloud |
Prova la replica delle immagini. | Nel tuo account di origine, invia un'immagine del contenitore a un repository di origine Amazon ECR nuovo o esistente con un tag immagine preceduto da. Puoi monitorare lo stato di avanzamento del CodeBuild progetto nella CodeBuild console Una volta completato con successo il CodeBuild progetto, accedi all'account AWS di destinazione, apri la console Amazon ECR e conferma che l'immagine esiste nel registro Amazon ECR di destinazione. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS, amministratore cloud, architetto cloud, DevOps ingegnere |
Prova l'esclusione delle immagini. | Nel tuo account di origine, invia un'immagine del contenitore a un repository di origine Amazon ECR nuovo o esistente con un tag di immagine che non ha il prefisso personalizzato. Verifica che il CodeBuild progetto non sia avviato e che nessuna immagine del contenitore sia presente nel registro di destinazione. | Amministratore AWS, AWS DevOps, amministratore di sistema AWS, amministratore cloud, architetto cloud, DevOps ingegnere |
Risorse correlate
Informazioni aggiuntive
Per distribuire automaticamente le risorse per questo modello, procedi nel seguente modo:
Scarica l'allegato ed estrai i due CloudFormation modelli:
part-1-copy-tagged-images.yaml
epart-2-destination-account-role.yaml
.Accedi alla CloudFormation console AWS
ed esegui la distribuzione part-1-copy-tagged-images.yaml
nello stesso account AWS e nella stessa regione dei registri Amazon ECR di origine. Aggiorna i parametri secondo necessità. Il modello distribuisce le seguenti risorse:Ruolo IAM di Amazon CloudWatch Events
Ruolo IAM CodeBuild del progetto AWS
CodeBuild Progetto AWS
Regola AWS CloudWatch Events
Prendi nota del valore di
SourceRoleName
nella scheda Outputs. Avrai bisogno di questo valore nel passaggio successivo.Implementa il secondo CloudFormation modello nell'account AWS in cui desideri copiare le immagini del contenitore Amazon ECR.
part-2-destination-account-role.yaml
Aggiorna i parametri secondo necessità. Per ilSourceRoleName
parametro, specificate il valore del passaggio 3. Questo modello implementa il ruolo IAM su più account.