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.
Replicar imágenes filtradas de contenedores de Amazon ECR en todas las cuentas o regiones
Creado por Abdal Garuba (AWS)
Entorno: producción | Tecnologías: contenedores y microservicios; DevOps | Servicios de AWS: Amazon EC2 Container Registry; Amazon; CloudWatch AWS CodeBuild; AWS Identity and Access Management; AWS CLI |
Resumen
Amazon Elastic Container Registry (Amazon ECR) puede replicar todas las imágenes de contenedores de un repositorio de imágenes en las regiones de Amazon Web Services (AWS) y en las cuentas de AWS de forma nativa, mediante las características de replicación cross-Region (entre regiones) y cross-account (entre cuentas). (Para obtener más información, consulte la publicación del blog de AWS Cross region replication in Amazon ECR has landed
Este patrón describe cómo replicar las imágenes de contenedores almacenadas en Amazon ECR en todas las cuentas y regiones de AWS, en función de los patrones de etiquetas de imagen. El patrón utiliza Amazon CloudWatch Events para detectar eventos push en las imágenes que tienen una etiqueta personalizada predefinida. Un evento push inicia un CodeBuild proyecto de AWS y le pasa los detalles de la imagen. El CodeBuild proyecto copia las imágenes del registro Amazon ECR de origen al registro de destino en función de los detalles proporcionados.
Este patrón copia las imágenes que tienen etiquetas específicas en todas las cuentas. Así, por ejemplo, puede usar este patrón para copiar solo imágenes seguras y listas para producción en la cuenta de AWS de producción. En la cuenta de desarrollo, una vez probadas exhaustivamente las imágenes, puede añadir una etiqueta predefinida a las imágenes seguras y seguir los pasos de este patrón para copiar las imágenes marcadas en la cuenta de producción.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa para los registros de Amazon ECR de origen y destino
Permisos administrativos para las herramientas utilizadas en este patrón
Docker
instalado en su equipo local para realizar pruebas Interfaz de la línea de comandos de AWS (AWS CLI), para autenticarse en Amazon ECR
Limitaciones
Este patrón observa los eventos push del registro de origen en una sola región de AWS. Puede implementar este patrón en otras regiones para observar los registros de esas regiones.
En este patrón, una regla de Amazon CloudWatch Events escucha un patrón de etiqueta de imagen único. Si desea comprobar si hay varios patrones, puede añadir eventos para detectar otros patrones de etiquetas de imagen.
Arquitectura
Arquitectura de destino
![Arquitectura para replicar imágenes de contenedores de Amazon ECR filtradas en todas las cuentas y regiones.](images/pattern-img/a0f635e4-3ba5-4411-b9f8-54cfc228535a/images/2cb7962d-5b45-41a2-ba8c-7a18f01b617a.png)
Automatizar y escalar
Este patrón se puede automatizar con un script de infraestructura como código (IaC) y se puede implementar a gran escala. Para usar las CloudFormation plantillas de AWS para implementar este patrón, descargue el adjunto y siga las instrucciones de la sección Información adicional.
Puede apuntar varios CloudWatch eventos de Amazon Events (con diferentes patrones de eventos personalizados) al mismo CodeBuild proyecto de AWS para replicar varios patrones de etiquetas de imagen, pero tendrá que actualizar la validación secundaria del buildspec.yaml
archivo (que se incluye en el archivo adjunto y en la sección Herramientas) de la siguiente manera para admitir varios patrones.
... if [[ ${IMAGE_TAG} != release-* ]]; then ...
Herramientas
Servicios de Amazon
IAM
: AWS Identity and Access Management (IAM) es un servicio web que ayuda a controlar de forma segura el acceso a los recursos de AWS. En este patrón, tendría que crear la función de IAM multicuenta que AWS CodeBuild asumirá al enviar las imágenes de los contenedores al registro de destino. Amazon ECR
: Amazon Elastic Container Registry (Amazon ECR) es un registro de contenedores totalmente administrado que facilita almacenar, administrar, compartir e implementar imágenes y artefactos de contenedores en cualquier lugar. Las acciones de inserción de imágenes en el registro de origen envían los detalles de los eventos del sistema al bus de eventos que recoge Amazon CloudWatch Events. AWS CodeBuild
: AWS CodeBuild es un servicio de integración continua totalmente gestionado que proporciona potencia informática para realizar tareas como la compilación del código fuente, la ejecución de pruebas y la producción de artefactos listos para su implementación. Este patrón utiliza AWS CodeBuild para realizar la acción de copia del registro Amazon ECR de origen al registro de destino. CloudWatch Eventos: Amazon CloudWatch Events ofrece una secuencia de eventos del sistema que describen los cambios en los recursos de AWS. Este patrón utiliza reglas para hacer coincidir las acciones push de Amazon ECR con un patrón de etiqueta de imagen específico.
Herramientas
Docker CLI
: Docker es una herramienta que facilita la creación y administración de contenedores. Los contenedores empaquetan una aplicación y todas sus dependencias en una sola unidad o paquete que se puede implementar fácilmente en cualquier plataforma que admita el tiempo de ejecución del contenedor.
Código
Se puede implementar este patrón de dos maneras:
Configuración automatizada: Implemente las dos CloudFormation plantillas de AWS que se proporcionan en el archivo adjunto. Para obtener instrucciones, consulte la sección Información adicional.
Configuración manual: Siga los pasos de la sección Epics.
Ejemplo de buildspec.yaml
Si utiliza las CloudFormation plantillas que se proporcionan con este patrón, el buildspec.yaml
archivo se incluye en los 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}
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Crea un rol de CloudWatch eventos. | En la cuenta de AWS de origen, cree un rol de IAM para que lo asuma Amazon CloudWatch Events. El rol debe tener permisos para iniciar un CodeBuild proyecto de AWS. Para crear el rol mediante la AWS CLI, siga las instrucciones de la documentación de IAM. Ejemplo de política de confianza (
Ejemplo de política de permisos (
| Administrador de AWS DevOps, administrador de sistemas de AWS, administrador de nube, arquitecto de nube, DevOps ingeniero |
Cree un CodeBuild rol. | Cree una función de IAM para CodeBuild que AWS la asuma siguiendo las instrucciones de la documentación de IAM. El rol debe tener los siguientes permisos:
Ejemplo de política de confianza (
Ejemplo de política de permisos (
Adjunte la política administrada
| Administrador de AWS DevOps, administrador de sistemas de AWS, administrador de nube, arquitecto de nube, DevOps ingeniero |
Cree un rol multicuenta. | En la cuenta de AWS de destino, cree una función de IAM para la CodeBuild función de AWS que asuma la cuenta de origen. El rol multicuenta debería permitir a las imágenes de contenedores crear un nuevo repositorio y cargar imágenes de contenedores a Amazon ECR. Para crear el rol de IAM mediante la AWS CLI, siga las instrucciones de la documentación de IAM. Para permitir el CodeBuild proyecto de AWS del paso anterior, utilice la siguiente política de confianza:
Para permitir que el CodeBuild proyecto de AWS del paso anterior guarde imágenes en el registro de destino, utilice la siguiente política de permisos:
| Administrador de AWS, administrador de la nube DevOps, arquitecto de la nube, DevOps ingeniero, administrador de sistemas de AWS |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Crea un CodeBuild proyecto. | Cree un CodeBuild proyecto de AWS en la cuenta de origen siguiendo las instrucciones de la CodeBuild documentación de AWS. El proyecto debe estar en la misma región que el registro de origen. Configure el proyecto de la siguiente manera:
| Administrador de AWS DevOps, administrador de sistemas de AWS, administrador de nube, arquitecto de nube, DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree una regla de eventos. | Como el patrón usa la función de filtrado de contenido, debes crear el evento con Amazon EventBridge. Crea el evento y el destino siguiendo las instrucciones de la EventBridge documentación, con algunas modificaciones:
| Administrador de AWS DevOps, administrador de sistemas de AWS, administrador de nube, arquitecto de nube, DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Autenticación con Amazon ECR. | Realice la autenticación en los registros de origen y destino siguiendo los pasos de la documentación de Amazon ECR. | Administrador de AWS DevOps, administrador de sistemas de AWS, administrador de nube, DevOps ingeniero, arquitecto de nube |
Pruebe la replicación de imágenes. | En su cuenta de origen, envíe una imagen de contenedor a un repositorio de origen de Amazon ECR nuevo o existente con una etiqueta de imagen con el prefijo Puede supervisar el progreso del CodeBuild proyecto en la CodeBuild consola Cuando el CodeBuild proyecto se haya completado correctamente, inicie sesión en la cuenta de AWS de destino, abra la consola Amazon ECR y confirme que la imagen existe en el registro de Amazon ECR de destino. | Administrador de AWS DevOps, administrador de sistemas de AWS, administrador de nube, arquitecto de nube, DevOps ingeniero |
Pruebe la exclusión de imágenes. | En su cuenta de origen, envíe una imagen de contenedor a un repositorio de origen de Amazon ECR nuevo o existente con una etiqueta de imagen que no tenga el prefijo personalizado. Confirme que el CodeBuild proyecto no se haya iniciado y que no aparezca ninguna imagen de contenedor en el registro de destino. | Administrador de AWS DevOps, administrador de sistemas de AWS, administrador de nube, arquitecto de nube, DevOps ingeniero |
Recursos relacionados
Filtrado basado en contenido en los patrones de EventBridge eventos de Amazon
Delegate access across AWS accounts using IAM roles (Delegar el acceso entre cuentas de AWS mediante roles de IAM)
Private image replication (Replicación de imágenes privadas)
Información adicional
Para implementar automáticamente los recursos de este patrón, siga estos pasos:
Descarga el archivo adjunto y extrae las dos CloudFormation plantillas:
part-1-copy-tagged-images.yaml
ypart-2-destination-account-role.yaml
.Inicie sesión en la CloudFormation consola de AWS
e impleméntelo part-1-copy-tagged-images.yaml
en la misma cuenta y región de AWS que los registros de Amazon ECR de origen. Actualice los parámetros según sea necesario. La plantilla implementa los recursos siguientes:Función de IAM en Amazon CloudWatch Events
Función de IAM en CodeBuild proyectos de AWS
CodeBuild Proyecto AWS
Regla de CloudWatch eventos de AWS
Tome nota del valor de
SourceRoleName
en la pestaña Outputs (Salidas). Lo necesitará para el siguiente paso.Implemente la segunda CloudFormation plantilla en la cuenta de AWS en la que desee copiar las imágenes del contenedor de Amazon ECR.
part-2-destination-account-role.yaml
Actualice los parámetros según sea necesario. En el parámetroSourceRoleName
, especifique el valor del paso 3. Esta plantilla implementa el rol de IAM multicuenta.Valide la replicación y exclusión de imágenes, tal y como se describe en el último paso de la sección de Epics.
Conexiones
Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip