

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Copie imágenes de contenedores de Amazon ECR en y Cuentas de AWS Regiones de AWS
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

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

Este patrón le muestra cómo utilizar un enfoque sin servidor para replicar imágenes etiquetadas de repositorios existentes de Amazon Elastic Container Registry (Amazon ECR) a otros repositorios y. Cuentas de AWS Regiones de AWS La solución se utiliza AWS Step Functions para administrar el flujo de trabajo de replicación y AWS Lambda funciona para copiar imágenes de contenedores de gran tamaño.

Amazon ECR utiliza características nativas de replicación [entre regiones](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) y [entre cuentas](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount) que replican imágenes de contenedor entre regiones y cuentas. Sin embargo, estas características solo replican las imágenes desde el momento en que se activa la replicación. No existe ningún mecanismo para replicar las imágenes existentes en distintas regiones y cuentas. 

Este patrón ayuda a los equipos de inteligencia artificial (IA) a distribuir modelos, marcos (por ejemplo PyTorch TensorFlow, y Hugging Face) y dependencias de aprendizaje automático (ML) en contenedores a otras cuentas y regiones. Esto puede ayudarle a superar los límites del servicio y optimizar los recursos de computación de la GPU. También puede replicar selectivamente los repositorios de Amazon ECR desde regiones y cuentas de origen específicas. Para obtener más información, consulte [Cross-Region replication in Amazon ECR has landed](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/) (La replicación entre regiones en Amazon ECR ya está aquí).

## Requisitos previos y limitaciones
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Requisitos previos **
+ Dos o más activas Cuentas de AWS (una cuenta de origen y una cuenta de destino, como mínimo)
+ Permisos adecuados AWS Identity and Access Management (IAM) en todas las cuentas
+ Docker para crear la imagen del contenedor de Lambda
+ AWS Command Line Interface (AWS CLI) configurados para todas las cuentas

**Limitaciones**
+ **Exclusión de imágenes sin etiquetar:** la solución copia solo las imágenes del contenedor que tienen etiquetas explícitas. Omite las imágenes sin etiquetar que existen con resúmenes de `SHA256`.
+ **Restricciones de tiempo de espera de ejecución de Lambda:** AWS Lambda está limitado a un tiempo de espera de ejecución máximo de 15 minutos, que puede ser insuficiente para copiar repositorios o imágenes de contenedores de gran tamaño.
+ **Administración manual de imágenes de contenedor:** el código `crane-app.py` de Python requiere volver a crear e implementar la imagen de contenedor de Lambda.
+ **Capacidad de procesamiento paralelo limitada:** la configuración de estado de `MaxConcurrency` limita el número de repositorios que puede copiar al mismo tiempo. Sin embargo, puedes modificar esta configuración en la plantilla de la cuenta de origen. AWS CloudFormation Tenga en cuenta que los valores de simultaneidad más altos pueden provocar que supere los límites de tasas de servicio y las cuotas de ejecución de Lambda a nivel de cuenta.

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

**Pila de destino**

El patrón tiene cuatro componentes principales:
+ **Infraestructura de cuentas de origen:** CloudFormation plantilla que crea los componentes de orquestación
+ **Infraestructura de cuentas de destino:** CloudFormation plantilla que crea funciones de acceso entre cuentas
+ **Función de Lambda:** función basada en Python que utiliza Crane para copiar imágenes de forma eficiente.
+ **Imagen de contenedor:** contenedor de Docker que empaqueta la función de Lambda con las herramientas necesarias.

**Arquitectura de destino**

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


**Flujo de trabajo de Step Functions**

La máquina de estados de Step Functions organiza lo siguiente, como se muestra en el siguiente diagrama:
+ `PopulateRepositoryList`**:** analiza los repositorios de Amazon ECR y rellena Amazon DynamoDB.
+ `GetRepositoryList`**:** recupera una lista de repositorios únicos de DynamoDB.
+ `DeduplicateRepositories`**:** garantiza que no haya ningún procesamiento duplicado.
+ `CopyRepositories`**:** gestiona la copia paralela de repositorios.
+ `NotifySuccess`/`NotifyFailure`**:** notificaciones de Amazon Simple Notification Service (Amazon SNS) basadas en el resultado de la ejecución.

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


## Tools (Herramientas)
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Herramientas de Amazon**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) le CloudWatch ayuda a supervisar las métricas de sus AWS recursos y las aplicaciones en las que se ejecuta AWS en tiempo real.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es un servicio de organización sin servidor que le ayuda a combinar funciones de Lambda y otras Servicios de AWS para crear aplicaciones críticas para la empresa.

**Otras herramientas**
+ [Crane](https://michaelsauter.github.io/crane/index.html) es una herramienta de orquestación de Docker. Es similar a Docker Compose, pero tiene características adicionales.
+ [Docker](https://www.docker.com/) es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.

**Repositorio de código**
+ [El código de este patrón está disponible en el repositorio. GitHub sample-ecr-copy ](https://github.com/aws-samples/sample-ecr-copy) Puede usar la CloudFormation plantilla del repositorio para crear los recursos subyacentes.

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

Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

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

### Preparación del entorno de
<a name="prepare-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure AWS CLI los perfiles. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de datos, ingeniero de aprendizaje automático | 
| Reúna la información requerida. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de datos, ingeniero de aprendizaje automático | 
| Clonar el repositorio. | Clone el repositorio del patrón en la estación de trabajo local:<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps ingeniero, ingeniero de datos, ingeniero de ML | 

### Implementación de infraestructura para la cuenta de destino
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide la plantilla. | Valide la CloudFormation plantilla:<pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Implemente la infraestructura de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Comprobar la implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 

### Creación e implementación de la imagen de contenedor de Lambda
<a name="build-and-deploy-the-lam-container-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Prepare la compilación del contenedor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Compile la imagen de contenedor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Cree un repositorio y cargue la imagen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Verifique la imagen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 

### Implementación de la infraestructura de cuenta de origen
<a name="deploy-the-source-account-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Prepare los parámetros de implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, DevOps ingeniero, ingeniero de aprendizaje automático | 
| Valide la plantilla de origen. | Valide la CloudFormation plantilla de origen:<pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Implemente la infraestructura de origen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Verifique la implementación y recopile los resultados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Confirme la suscripción de correo electrónico. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 

### Ejecución y supervisión del proceso de copia
<a name="run-and-monitor-the-copy-process"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute y supervise el proceso de copia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Ejecute Step Functions. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Supervise el progreso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Compruebe los resultados. | Espere a que se complete el proceso (se actualiza 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 ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Verifique las imágenes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingeniero, ingeniero de datos, ingeniero de ML | 

## Resolución de problemas
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se ha podido ejecutar Step Functions. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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>
+ [Documentación de Crane](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [¿Qué es Amazon Elastic Container Registry?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [¿Qué es AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [¿Qué es Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Información adicional
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Parámetros de configuración**


| 
| 
| Parámetro | Description (Descripción) | Ejemplo | 
| --- |--- |--- |
| `SourceAccountId` |  Cuenta de AWS ID de la fuente | `11111111111` | 
| `DestinationAccountId` |  Cuenta de AWS ID de destino | `22222222222` | 
| `DestinationRegion` | Objetivo Región de AWS | `us-east-2` | 
| `SourceRegion` | Fuente Región de AWS | `us-east-1` | 
| `NotificationEmail` | Correo electrónico para las notificaciones | `abc@xyz.com` | 
| `RepositoryList` | Repositorios que se van a copiar | `repo1,repo2,repo3` | 
| `LambdaImageUri` | URI de la imagen de contenedor de Lambda | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 