

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á.

# Copie imagens de contêineres do Amazon ECR entre e Contas da AWS Regiões da AWS
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

## Resumo
<a name="copy-ecr-container-images-across-accounts-regions-summary"></a>

Esse padrão mostra como usar uma abordagem sem servidor para replicar imagens marcadas de repositórios existentes do Amazon Elastic Container Registry (Amazon ECR) para outros repositórios e. Contas da AWS Regiões da AWS A solução é usada AWS Step Functions para gerenciar o fluxo de trabalho de replicação e AWS Lambda as funções para copiar imagens de contêineres grandes.

O Amazon ECR usa recursos nativos de replicação [entre regiões](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) e [entre contas](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount), que replicam imagens de contêiner por diferentes regiões e contas. No entanto, esses recursos só passam a replicar imagens depois que a replicação é ativada. Não existe um mecanismo para replicar imagens já existentes em diferentes regiões e contas. 

Esse padrão ajuda as equipes de inteligência artificial (IA) a distribuir modelos, estruturas de aprendizado de máquina (ML) em contêineres (por exemplo, PyTorch TensorFlow, e Hugging Face) e dependências para outras contas e regiões. Isso pode auxiliar na superação de limitações de serviço e na otimização do uso de recursos de computação, como GPU. É possível replicar somente determinados repositórios do Amazon ECR provenientes de contas e regiões específicas. Para obter mais informações, consulte [Cross-Region replication in Amazon ECR has landed](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/).

## Pré-requisitos e limitações
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Pré-requisitos **
+ Duas ou mais ativas Contas da AWS (uma conta de origem e uma conta de destino, no mínimo)
+ Permissões apropriadas AWS Identity and Access Management (IAM) em todas as contas
+ Docker para criar a imagem de contêiner do Lambda
+ AWS Command Line Interface (AWS CLI) configurado para todas as contas

**Limitações**
+ **Exclusão de imagens sem etiquetas**: a solução copia apenas imagens de contêiner que contam com etiquetas explícitas. Imagens sem etiquetas que contam com arquivos de resumo `SHA256` são desconsideradas.
+ **Restrições de tempo limite de execução do Lambda — AWS Lambda é limitado a um tempo limite máximo de execução de 15 minutos, o que pode ser insuficiente para copiar grandes imagens de contêineres** ou repositórios.
+ **Gerenciamento manual de imagens de contêiner**: o código Python `crane-app.py` requer um novo desenvolvimento e implantação da imagem de contêiner do Lambda.
+ **Capacidade limitada de processamento paralelo**: a configuração `MaxConcurrency` destinada ao estado limita quantos repositórios podem ser copiados simultaneamente. No entanto, você pode modificar essa configuração no AWS CloudFormation modelo da conta de origem. É válido salientar que valores de concorrência mais elevados podem fazer você exceder os limites de taxa do serviço e as cotas de execução do Lambda no nível da conta.

## Arquitetura
<a name="copy-ecr-container-images-across-accounts-regions-architecture"></a>

**Pilha de destino**

O padrão conta com quatro componentes principais:
+ **Infraestrutura da conta de origem —** CloudFormation modelo que cria os componentes de orquestração
+ **Infraestrutura da conta de destino —** CloudFormation modelo que cria funções de acesso entre contas
+ **Função do Lambda**: função baseada em Python que usa a ferramenta Crane para realizar uma cópia eficiente das imagens
+ **Imagem de contêiner**: o contêiner do Docker que adiciona as ferramentas necessárias na função do Lambda

**Arquitetura de destino**

![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/cc7d9823-3dc8-4090-a203-910b1ac4447c.png)


**Fluxo de trabalho do Step Functions**

A máquina de estado do Step Functions realiza a orquestração das seguintes etapas, como ilustrado no diagrama a seguir:
+ `PopulateRepositoryList`**:** realiza verificações nos repositórios do Amazon ECR e preenche o Amazon DynamoDB
+ `GetRepositoryList`**:** recupera uma lista exclusiva de repositórios do DynamoDB
+ `DeduplicateRepositories`**:** garante que não haja processamento duplicado
+ `CopyRepositories`**:** gerencia a cópia paralela dos repositórios
+ `NotifySuccess`/`NotifyFailure`**:** envia notificações pelo Amazon Simple Notiﬁcation Service (Amazon SNS) com base no resultado da execução

![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/1b740084-ba2b-4956-aa12-ebbf52be5e7d.png)


## Ferramentas
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Ferramentas da Amazon**
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ajuda você a monitorar as métricas dos seus AWS recursos e dos aplicativos em que você executa AWS em tempo real.
+ O [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.
+ O [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)é um serviço de orquestração sem servidor que ajuda você a combinar funções do Lambda e outras para criar aplicativos essenciais para os negócios. Serviços da AWS 

**Outras ferramentas**
+ O [Crane](https://michaelsauter.github.io/crane/index.html) é uma ferramenta de orquestração do Docker. É semelhante ao Docker Compose, mas conta com recursos adicionais.
+ O [Docker](https://www.docker.com/) é um conjunto de produtos de plataforma como serviço (PaaS) que usam virtualização em nível de sistema operacional para disponibilizar software em contêineres.

**Repositório de código**
+ O código desse padrão está disponível no GitHub [sample-ecr-copy repositório.](https://github.com/aws-samples/sample-ecr-copy) Você pode usar o CloudFormation modelo do repositório para criar os recursos subjacentes.

## Práticas recomendadas
<a name="copy-ecr-container-images-across-accounts-regions-best-practices"></a>

Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="copy-ecr-container-images-across-accounts-regions-epics"></a>

### Preparar seu ambiente da
<a name="prepare-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure AWS CLI perfis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de dados, engenheiro de ML | 
| Colete as informações necessárias. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de dados, engenheiro de ML | 
| Clonar o repositório. | Clone o repositório do padrão para sua estação de trabalho local:<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps engenheiro, engenheiro de dados, engenheiro de ML | 

### Implantação da infraestrutura para a conta de destino
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide o modelo. | Valide o CloudFormation modelo:<pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Implante a infraestrutura da conta de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Verificar a implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 

### Desenvolvimento e implantação da imagem de contêiner do Lambda
<a name="build-and-deploy-the-lam-container-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Prepare o desenvolvimento do contêiner. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Crie a imagem do contêiner. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Crie um repositório e faça o upload da imagem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Verifique a imagem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 

### Implantação da infraestrutura da conta de origem
<a name="deploy-the-source-account-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Prepare os parâmetros de implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, DevOps engenheiro, engenheiro de ML | 
| Valide o modelo de origem. | Valide o CloudFormation modelo de origem:<pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Implante a infraestrutura de origem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Verifique a implantação e colete as saídas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Confirme sua inscrição por e-mail. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 

### Execução e monitoramento do processo de cópia
<a name="run-and-monitor-the-copy-process"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute e monitore o processo de cópia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Execute a função de etapa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Monitore o progresso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Verifique os resultados. | Aguarde o processo ser concluído (com atualizações a cada 30 segundos):<pre>while true; do<br />  STATUS=$(aws stepfunctions describe-execution \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'status' \<br />    --output text)<br />  <br />  echo "Current status: $STATUS"<br />  <br />  if [[ "$STATUS" == "SUCCEEDED" || "$STATUS" == "FAILED" || "$STATUS" == "TIMED_OUT" || "$STATUS" == "ABORTED" ]]; then<br />    break<br />  fi<br />  <br />  sleep 30<br />done<br /><br />echo "Final execution status: $STATUS"</pre> | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Verifique as imagens. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de dados, engenheiro de ML | 

## Solução de problemas
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Não foi possível executar o Step Functions. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | 

## Recursos relacionados
<a name="copy-ecr-container-images-across-accounts-regions-resources"></a>
+ [Documentação do Crane](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [O que é o Amazon Elastic Container Registry?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [O que é AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [O que é Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Mais informações
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Parâmetros de configuração**


| 
| 
| Parâmetro | Description | Exemplo | 
| --- |--- |--- |
| `SourceAccountId` |  Conta da AWS ID de origem | `11111111111` | 
| `DestinationAccountId` |  Conta da AWS ID de destino | `22222222222` | 
| `DestinationRegion` | Alvo Região da AWS | `us-east-2` | 
| `SourceRegion` | Fonte Região da AWS | `us-east-1` | 
| `NotificationEmail` | E-mail para receber notificações | `abc@xyz.com` | 
| `RepositoryList` | Repositórios a serem copiados | `repo1,repo2,repo3` | 
| `LambdaImageUri` | URI da imagem de contêiner do Lambda | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 