As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Replique imagens filtradas de contêineres do Amazon ECR entre contas ou regiões
Criado por Abdal Garuba (AWS)
Ambiente: produção | Tecnologias: contêineres e microsserviços; DevOps | Serviços da AWS: Amazon EC2 Container Registry; Amazon; AWS; CloudWatch AWS CodeBuild; AWS Identity and Access Management; AWS CLI |
Resumo
O Amazon Elastic Container Registry (Amazon ECR) pode replicar todas as imagens de contêineres em um repositório de imagens nas regiões da Amazon Web Services (AWS) e nas contas da AWS de forma nativa, usando os atributos de replicação entre regiões e entre contas. (Para obter mais informações, consulte a postagem no blog da AWS: A replicação entre regiões no Amazon ECR chegou.)
Esse padrão descreve como replicar imagens de contêineres que são armazenadas no Amazon ECR em todas as contas e regiões da AWS, com base em padrões de tag de imagem. O padrão usa o Amazon CloudWatch Events para ouvir eventos push para imagens que têm uma tag personalizada predefinida. Um evento push inicia um CodeBuild projeto da AWS e passa os detalhes da imagem para ele. O CodeBuild projeto copia as imagens do registro de origem do Amazon ECR para o registro de destino com base nos detalhes fornecidos.
Esse padrão copia imagens que têm tags específicas em todas as contas. Por exemplo, você pode usar esse padrão para copiar somente imagens seguras e prontas para produção na conta de produção da AWS. Na conta de desenvolvimento, depois que as imagens forem completamente testadas, você poderá adicionar uma tag predefinida às imagens seguras e usar as etapas desse padrão para copiar as imagens marcadas para a conta de produção.
Pré-requisitos e limitações
Pré-requisitos
Uma conta ativa AWS para registros de origem e destino do Amazon ECR
Permissões administrativas para as ferramentas usadas nesse padrão
Docker
instalado em sua máquina local para teste AWS Command Line Interface (AWS CLI)), para autenticação no Amazon ECR
Limitações
Esse padrão observa os eventos push do registro de origem em apenas uma região da AWS. Você pode implantar esse padrão em outras regiões para observar os registros nessas regiões.
Nesse padrão, uma regra da Amazon CloudWatch Events escuta um único padrão de tag de imagem. Se quiser verificar vários padrões, você pode adicionar eventos para ouvir padrões adicionais de tags de imagem.
Arquitetura
Arquitetura de destino
![Arquitetura para replicar imagens filtradas de contêineres do Amazon ECR entre contas e regiões.](images/pattern-img/a0f635e4-3ba5-4411-b9f8-54cfc228535a/images/2cb7962d-5b45-41a2-ba8c-7a18f01b617a.png)
Automação e escala
Esse padrão pode ser automatizado com um script de infraestrutura como código (IaC) e implantado em grande escala. Para usar os CloudFormation modelos da AWS para implantar esse padrão, baixe o anexo e siga as instruções na seção Informações adicionais.
Você pode direcionar vários CloudWatch eventos da Amazon Events (com diferentes padrões de eventos personalizados) para o mesmo CodeBuild projeto da AWS para replicar vários padrões de tag de imagem, mas precisará atualizar a validação secundária no buildspec.yaml
arquivo (que está incluído no anexo e na seção Ferramentas) da seguinte forma para suportar vários padrões.
... if [[ ${IMAGE_TAG} != release-* ]]; then ...
Ferramentas
Serviço da Amazon
IAM
: o AWS Identity and Access Management (IAM) permite que você gerencie o acesso aos serviços e recursos da AWS com segurança. Nesse padrão, você precisaria criar a função do IAM entre contas que a AWS CodeBuild assumirá ao enviar imagens de contêiner para o registro de destino. Amazon ECR
: o Amazon Elastic Container Registry (Amazon ECR) é um registro de contêiner do Docker totalmente gerenciado que facilita o armazenamento, o gerenciamento e a implantação de imagens de contêiner do Docker. As ações de envio de imagens para o registro de origem enviam detalhes do evento do sistema para o barramento de eventos que é coletado pela Amazon CloudWatch Events. AWS CodeBuild
— CodeBuild A AWS é um serviço de integração contínua totalmente gerenciado que fornece poder computacional para realizar trabalhos como compilar código-fonte, executar testes e produzir artefatos prontos para serem implantados. Esse padrão usa CodeBuild a AWS para realizar a ação de cópia do registro de origem do Amazon ECR para o registro de destino. CloudWatch Eventos — A Amazon CloudWatch Events fornece um fluxo de eventos do sistema que descrevem as mudanças nos recursos da AWS. Esse padrão usa regras para combinar as ações push do Amazon ECR com um padrão de tag de imagem específico.
Ferramentas
Docker CLI
: o Docker é uma ferramenta que facilita a criação e o gerenciamento de contêineres. Os contêineres empacotam um aplicativo e todas as suas dependências em uma unidade ou pacote que pode ser facilmente implantado em qualquer plataforma que ofereça suporte ao runtime do contêiner.
Código
É possível implementar esse padrão de duas maneiras:
Configuração automatizada: implante os dois CloudFormation modelos da AWS fornecidos no anexo. Para obter instruções, consulte a seção Informações adicionais.
Configuração manual: siga as etapas na seção Épicos.
Exemplo: buildspec.yaml
Se você estiver usando os CloudFormation modelos fornecidos com esse padrão, o buildspec.yaml
arquivo será incluído nos CodeBuild recursos.
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}
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie uma função de CloudWatch eventos. | Na conta de origem da AWS, crie uma função do IAM para a Amazon CloudWatch Events assumir. A função deve ter permissões para iniciar um CodeBuild projeto da AWS. Para criar a função usando a AWS CLI, siga as instruções na documentação do IAM. Exemplo de política de confiança do
Exemplo de política de permissões (
| Administrador da AWS, AWS DevOps, administrador de sistemas da AWS, administrador de nuvem, arquiteto de nuvem, DevOps engenheiro |
Crie uma CodeBuild função. | Crie uma função do IAM para CodeBuild a AWS assumir, seguindo as instruções na documentação do IAM. O perfil também deve ter as seguintes permissões:
Exemplo de política de confiança do
Exemplo de política de permissões (
Anexe a política gerenciada
| Administrador da AWS, AWS DevOps, administrador de sistemas da AWS, administrador de nuvem, arquiteto de nuvem, DevOps engenheiro |
Criar uma função de conta cruzada. | Na conta da AWS de destino, crie uma função do IAM para a CodeBuild função da AWS a ser assumida pela conta de origem. A função entre contas deve permitir que imagens de contêiner criem um novo repositório e façam upload de imagens de contêiner para o Amazon ECR. Para criar o perfil do IAM usando a AWS CLI, siga as instruções na documentação do IAM. Para permitir o CodeBuild projeto da AWS da etapa anterior, use a seguinte política de confiança:
Para permitir que o CodeBuild projeto da AWS da etapa anterior salve imagens no registro de destino, use a seguinte política de permissão:
| Administrador da AWS, AWS DevOps, administrador de nuvem, arquiteto de nuvem, DevOps engenheiro, administrador de sistemas da AWS |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie um CodeBuild projeto. | Crie um CodeBuild projeto da AWS na conta de origem seguindo as instruções na CodeBuild documentação da AWS. O projeto deve estar na mesma região que o registro de origem. Configure o projeto da seguinte forma:
| Administrador da AWS, AWS DevOps, administrador de sistemas da AWS, administrador de nuvem, arquiteto de nuvem, DevOps engenheiro |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Criar uma regra de evento. | Como o padrão usa o recurso de filtragem de conteúdo, você precisa criar o evento usando a Amazon EventBridge. Crie o evento e o alvo seguindo as instruções na EventBridge documentação, com algumas modificações:
| Administrador da AWS, AWS DevOps, administrador de sistemas da AWS, administrador de nuvem, arquiteto de nuvem, DevOps engenheiro |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Autenticar com o Amazon ECR | Autentique-se nos registros de origem e destino seguindo as etapas na documentação do Amazon ECR. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS, administrador de nuvem, DevOps engenheiro, arquiteto de nuvem |
Replicação de imagem de teste. | Em sua conta de origem, envie uma imagem de contêiner para um repositório de origem novo ou existente do Amazon ECR com uma tag de imagem prefixada com Você pode monitorar o progresso do CodeBuild projeto no CodeBuild console Depois que o CodeBuild projeto for concluído com sucesso, faça login na conta da AWS de destino, abra o console do Amazon ECR e confirme que a imagem existe no registro do Amazon ECR de destino. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS, administrador de nuvem, arquiteto de nuvem, DevOps engenheiro |
Exclusão de imagem de teste. | Em sua conta de origem, envie uma imagem de contêiner para um repositório de origem novo ou existente do Amazon ECR com uma tag de imagem que não tenha o prefixo personalizado. Confirme se o CodeBuild projeto não foi iniciado e se nenhuma imagem de contêiner aparece no registro de destino. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS, administrador de nuvem, arquiteto de nuvem, DevOps engenheiro |
Recursos relacionados
Mais informações
Para implantar automaticamente os recursos desse padrão, siga estas etapas:
Baixe o anexo e extraia os dois CloudFormation modelos:
part-1-copy-tagged-images.yaml
part-2-destination-account-role.yaml
e.Faça login no CloudFormation console da AWS
e implante part-1-copy-tagged-images.yaml
na mesma conta e região da AWS dos registros de origem do Amazon ECR. Atualizar parâmetros conforme necessário: O modelo define os seguintes recursos:Função do Amazon CloudWatch Events IAM
Função CodeBuild do IAM do projeto AWS
CodeBuild Projeto AWS
Regra de CloudWatch eventos da AWS
Anote o valor de
SourceRoleName
na guia Saídas. Você precisará desse valor na próxima etapa.Implante o segundo CloudFormation modelo,
part-2-destination-account-role.yaml
, na conta da AWS para a qual você deseja copiar as imagens do contêiner Amazon ECR. Atualizar parâmetros conforme necessário: Para o parâmetroSourceRoleName
, especifique o valor da etapa 3. Esse modelo implanta o perfil do IAM entre contas.Valide a replicação e exclusão de imagens, conforme descrito na última etapa da seção Épicos.
Anexos
Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip