

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**

![](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.

![](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. | 1. Configure el perfil de la cuenta de origen:<pre>aws configure --profile source-account<br /># Enter: Access Key ID, Secret Access Key, Default region, Output format (json)</pre><br />2. Configure el perfil de la cuenta de destino:<pre>aws configure --profile destination-account <br /># Enter: Access Key ID, Secret Access Key, Default region, Output format (json) </pre><br />3. Verifique las configuraciones:<pre>aws sts get-caller-identity --profile source-account <br />aws sts get-caller-identity --profile destination-account</pre> | DevOps ingeniero, ingeniero de datos, ingeniero de aprendizaje automático | 
| Reúna la información requerida. | 1. Obtenga el ID de la cuenta de origen:<pre>export SOURCE_ACCOUNT_ID=$(aws sts get-caller-identity --profile source-account --query Account --output text)<br />echo "Source Account ID: $SOURCE_ACCOUNT_ID"</pre><br />2. Obtenga el ID de la cuenta de destino:<pre>export DEST_ACCOUNT_ID=$(aws sts get-caller-identity --profile destination-account --query Account --output text)<br />echo "Destination Account ID: $DEST_ACCOUNT_ID"</pre><br />3. Configure el Regiones de AWS. Modifique este comando para su región:<pre>export SOURCE_REGION="us-east-1"<br />export DEST_REGION="us-east-2"</pre><br />4. Enumere los repositorios de Amazon ECR existentes en la cuenta de origen:<pre>aws ecr describe-repositories --profile source-account --region $SOURCE_REGION --query 'repositories[].repositoryName' --output table</pre> | 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. | 1. Implemente la pila de la cuenta de destino:<pre>aws cloudformation deploy \<br />  --template-file "Destination Account cf_template.yml" \<br />  --stack-name ecr-copy-destination \<br />  --parameter-overrides \<br />    SourceAccountId=$SOURCE_ACCOUNT_ID \<br />    SourceRoleName=ECRContainerLambdaRole \<br />  --capabilities CAPABILITY_NAMED_IAM \<br />  --profile destination-account \<br />  --region $DEST_REGION<br /></pre><br />2. Espere a que se complete la pila:<pre>aws cloudformation wait stack-create-complete \<br />  --stack-name ecr-copy-destination \<br />  --profile destination-account \<br />  --region $DEST_REGION</pre> | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Comprobar la implementación. | 1. Obtenga salidas de pila:<pre>aws cloudformation describe-stacks \<br />  --stack-name ecr-copy-destination \<br />  --profile destination-account \<br />  --region $DEST_REGION \<br />  --query 'Stacks[0].Outputs' \<br />  --output table</pre><br />2. Almacene el rol de IAM entre cuentas:<pre>export CROSS_ACCOUNT_ROLE_ARN=$(aws cloudformation describe-stacks \<br />  --stack-name ecr-copy-destination \<br />  --profile destination-account \<br />  --region $DEST_REGION \<br />  --query 'Stacks[0].Outputs[?OutputKey==`CrossAccountRoleArn`].OutputValue' \<br />  --output text)<br /><br />echo "Cross-Account Role ARN: $CROSS_ACCOUNT_ROLE_ARN"</pre> | 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. | 1. Compruebe que Docker se esté ejecutando:<pre>docker --version<br />docker info</pre><br />2. Asegúrese de que `crane-app.py` y `Dockerfile` estén en el directorio actual:<pre>ls -la crane-app.py Dockerfile</pre> | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Compile la imagen de contenedor. | 1. Compile la imagen de contenedor de Lamba:<pre>docker build -t ecr-copy-lambda . --no-cache</pre><br />2. Compruebe que la imagen se haya creado:<pre>docker images ecr-copy-lambda</pre><br />3. (Opcional) Pruebe el contenedor localmente:<pre>docker run --rm --entrypoint python ecr-copy-lambda -c "import boto3; print('Container working')"</pre> | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Cree un repositorio y cargue la imagen. | 1. Cree un repositorio de Amazon ECR en la cuenta de origen:<pre>aws ecr create-repository \<br />  --repository-name ecr-copy-lambda \<br />  --profile source-account \<br />  --region $SOURCE_REGION</pre><br />2. Obtenga un token de inicio de sesión de Amazon ECR y autentique Docker:<pre>aws ecr get-login-password \<br />  --profile source-account \<br />  --region $SOURCE_REGION | \<br />  docker login --username AWS --password-stdin \<br />  $SOURCE_ACCOUNT_ID.dkr.ecr.$SOURCE_REGION.amazonaws.com</pre><br />3. Etiquete la imagen para Amazon ECR:<pre>docker tag ecr-copy-lambda:latest \<br />  $SOURCE_ACCOUNT_ID.dkr.ecr.$SOURCE_REGION.amazonaws.com/ecr-copy-lambda:latest</pre><br />4. Cargue la imagen en Amazon ECR:<pre>docker push $SOURCE_ACCOUNT_ID.dkr.ecr.$SOURCE_REGION.amazonaws.com/ecr-copy-lambda:latest</pre><br />5. Almacene el URI de la imagen para su uso posterior:<pre>export LAMBDA_IMAGE_URI="$SOURCE_ACCOUNT_ID.dkr.ecr.$SOURCE_REGION.amazonaws.com/ecr-copy-lambda:latest"<br />echo "Lambda Image URI: $LAMBDA_IMAGE_URI"</pre> | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Verifique la imagen. | 1. Enumere las imágenes del repositorio:<pre>aws ecr list-images \<br />  --repository-name ecr-copy-lambda \<br />  --profile source-account \<br />  --region $SOURCE_REGION</pre><br />2. Obtenga los detalles de la imagen:<pre>aws ecr describe-images \<br />  --repository-name ecr-copy-lambda \<br />  --profile source-account \<br />  --region $SOURCE_REGION</pre> | 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. | 1. Configure el correo electrónico de notificación:<pre>export NOTIFICATION_EMAIL="your-email@company.com"</pre><br />2. Defina los repositorios que desea copiar (separados por comas):<pre>export REPOSITORY_LIST="app-frontend,app-backend,database-migrations"</pre><br />3. Configure el entorno:<pre>export ENVIRONMENT="dev"<br /><br />echo "Deployment Parameters:"<br />echo "Source Account: $SOURCE_ACCOUNT_ID"<br />echo "Destination Account: $DEST_ACCOUNT_ID"<br />echo "Source Region: $SOURCE_REGION"<br />echo "Destination Region: $DEST_REGION"<br />echo "Lambda Image: $LAMBDA_IMAGE_URI"<br />echo "Notification Email: $NOTIFICATION_EMAIL"<br />echo "Repositories: $REPOSITORY_LIST"</pre> | 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. | 1. Implemente la pila de la cuenta de origen:<pre>aws cloudformation deploy \<br />  --template-file "Source Account Cf template.yml" \<br />  --stack-name ecr-copy-source \<br />  --parameter-overrides \<br />    SourceAccountId=$SOURCE_ACCOUNT_ID \<br />    DestinationAccountId=$DEST_ACCOUNT_ID \<br />    DestinationRegion=$DEST_REGION \<br />    SourceRegion=$SOURCE_REGION \<br />    NotificationEmail=$NOTIFICATION_EMAIL \<br />    RepositoryList="$REPOSITORY_LIST" \<br />    LambdaImageUri=$LAMBDA_IMAGE_URI \<br />    Environment=$ENVIRONMENT \<br />  --capabilities CAPABILITY_NAMED_IAM \<br />  --profile source-account \<br />  --region $SOURCE_REGION</pre><br />2. Espere a que se complete la pila (esta acción puede tardar hasta 10 minutos):<pre>aws cloudformation wait stack-create-complete \<br />  --stack-name ecr-copy-source \<br />  --profile source-account \<br />  --region $SOURCE_REGION</pre> | Ingeniero de datos, ingeniero de aprendizaje automático, DevOps ingeniero | 
| Verifique la implementación y recopile los resultados. | 1. Obtenga las salidas de la pila:<pre>aws cloudformation describe-stacks \<br />  --stack-name ecr-copy-source \<br />  --profile source-account \<br />  --region $SOURCE_REGION \<br />  --query 'Stacks[0].Outputs' \<br />  --output table</pre><br />2. Guarde los nombres de recursos de Amazon (ARNs) para la máquina de estado y el tema SNS:<pre>export STATE_MACHINE_ARN=$(aws cloudformation describe-stacks \<br />  --stack-name ecr-copy-source \<br />  --profile source-account \<br />  --region $SOURCE_REGION \<br />  --query 'Stacks[0].Outputs[?OutputKey==`StateMachineArn`].OutputValue' \<br />  --output text)<br /><br />export SNS_TOPIC_ARN=$(aws cloudformation describe-stacks \<br />  --stack-name ecr-copy-source \<br />  --profile source-account \<br />  --region $SOURCE_REGION \<br />  --query 'Stacks[0].Outputs[?OutputKey==`SNSTopicArn`].OutputValue' \<br />  --output text)<br /><br />echo "State Machine ARN: $STATE_MACHINE_ARN"<br />echo "SNS Topic ARN: $SNS_TOPIC_ARN"</pre> | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Confirme la suscripción de correo electrónico. | 1. Compruebe su correo electrónico para confirmar su suscripción a SNS.<br />2. Seleccione el enlace de confirmación en el correo electrónico.<br />3. Verifique el estado de la suscripción.<pre>aws sns list-subscriptions-by-topic \<br />  --topic-arn $SNS_TOPIC_ARN \<br />  --profile source-account \<br />  --region $SOURCE_REGION</pre> | 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. | 1. Inicie sesión en la Consola de administración de AWS[consola [Step Functions y ábrala](https://console.aws.amazon.com/states/home)](https://console.aws.amazon.com/states/home).<br />2. Localice la máquina de estado.<br />3. Seleccione **Iniciar ejecución**.<br />Cuando finalice, los resultados se muestran en la pestaña de **entrada y salida de la ejecución**.<br />4. (Opcional) Si quieres seguir ejecutando Step Functions mediante el AWS CLI, sigue los pasos restantes de esta epopeya. | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Ejecute Step Functions. | 1. Genere un nombre único:<pre>export EXECUTION_NAME="ecr-copy-$(date +%Y%m%d-%H%M%S)"</pre><br />2. Ejecute Step Functions.<pre>export EXECUTION_ARN=$(aws stepfunctions start-execution \<br />  --state-machine-arn $STATE_MACHINE_ARN \<br />  --name $EXECUTION_NAME \<br />  --profile source-account \<br />  --region $SOURCE_REGION \<br />  --query 'executionArn' \<br />  --output text)<br /><br />echo "Execution started: $EXECUTION_ARN"<br />echo "Execution Name: $EXECUTION_NAME"</pre> | DevOps ingeniero, ingeniero de aprendizaje automático, ingeniero de datos | 
| Supervise el progreso. | 1. Compruebe el estado:<pre><br />aws stepfunctions describe-execution \<br />  --execution-arn $EXECUTION_ARN \<br />  --profile source-account \<br />  --region $SOURCE_REGION \<br />  --query '{Status:status,StartDate:startDate,StopDate:stopDate}' \<br />  --output table</pre><br />2. Obtenga el historial:<pre><br />aws stepfunctions get-execution-history \<br />  --execution-arn $EXECUTION_ARN \<br />  --profile source-account \<br />  --region $SOURCE_REGION \<br />  --query 'events[?type==`TaskStateEntered` || type==`TaskSucceeded` || type==`TaskFailed`].{Type:type,Timestamp:timestamp,Details:stateEnteredEventDetails.name}' \<br />  --output table</pre> | 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. | 1. Enumere los repositorios de la cuenta de destino:<pre>aws ecr describe-repositories \<br />  --profile destination-account \<br />  --region $DEST_REGION \<br />  --query 'repositories[].repositoryName' \<br />  --output table</pre><br />2. Compruebe las imágenes del repositorio:<pre>for repo in $(echo $REPOSITORY_LIST | tr ',' ' '); do<br />  echo "\nImages in repository: $repo"<br />  aws ecr list-images \<br />    --repository-name $repo \<br />    --profile destination-account \<br />    --region $DEST_REGION \<br />    --query 'imageIds[].imageTag' \<br />    --output table 2>/dev/null || echo "Repository $repo not found or no images"<br />done</pre> | 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. | 1. Para recuperar los eventos de error detallados del historial, ejecute el siguiente AWS CLI comando:<pre>if [[ "$STATUS" == "FAILED" ]]; then<br />  echo "Getting failure details..."<br />  aws stepfunctions get-execution-history \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'events[?type==`TaskFailed`]' \<br />    --output json<br />fi<br /></pre><br />2. Para recuperar los registros de las funciones de Lambda fallidas, ejecute el siguiente comando: AWS CLI <pre># Check Lambda function logs<br />echo "\nLambda function logs:"<br />aws logs describe-log-groups \<br />  --log-group-name-prefix "/aws/lambda/ecr-copy-source" \<br />  --profile source-account \<br />  --region $SOURCE_REGION \<br />  --query 'logGroups[].logGroupName' \<br />  --output table</pre> | 

## 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` | 