Cree e inserte imágenes de Docker en Amazon ECR mediante GitHub Actions y Terraform - Recomendaciones de AWS

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.

Cree e inserte imágenes de Docker en Amazon ECR mediante GitHub Actions y Terraform

Creado por Ruchika Modi (AWS)

Repositorio de código: docker-ecr-actions-workflow

Entorno: producción

Tecnologías: DevOps contenedores y microservicios; infraestructura

Carga de trabajo: todas las demás cargas de trabajo

Servicios de AWS: Amazon ECR

Resumen

Este patrón explica cómo puede crear GitHub flujos de trabajo reutilizables para crear su Dockerfile y enviar la imagen resultante a Amazon Elastic Container Registry (Amazon ECR). El patrón automatiza el proceso de creación de sus Dockerfiles mediante Terraform y Actions. GitHub Esto minimiza la posibilidad de errores humanos y reduce considerablemente el tiempo de implementación.

Una GitHub acción de envío a la rama principal del GitHub repositorio inicia el despliegue de los recursos. El flujo de trabajo crea un repositorio Amazon ECR único en función de la combinación de la GitHub organización y el nombre del repositorio. A continuación, envía la imagen de Dockerfile al repositorio de Amazon ECR.

Requisitos previos y limitaciones

Requisitos previos

Limitaciones

Este código reutilizable se ha probado solo con GitHub Actions.

Arquitectura

Pila de tecnología de destino

  • Repositorio Amazon ECR

  • GitHub Acciones

  • Terraform

Arquitectura de destino

Flujo de trabajo para crear GitHub flujos de trabajo reutilizables para crear Dockerfile y enviar imágenes a Amazon ECR.

En el siguiente diagrama se ilustra lo siguiente:

1. Un usuario añade plantillas de Dockerfile y Terraform al repositorio. GitHub

2. Estas adiciones inician un GitHub flujo de trabajo de acciones.

3. El flujo de trabajo comprueba si existe un repositorio de Amazon ECR. De lo contrario, crea el repositorio en función de la GitHub organización y el nombre del repositorio.

4. El flujo de trabajo crea el Dockerfile y envía la imagen al repositorio de Amazon ECR.

Herramientas

Servicios de Amazon

Otras herramientas

  • GitHub Actions está integrado en la GitHub plataforma para ayudarlo a crear, compartir y ejecutar flujos de trabajo en sus GitHub repositorios. Puedes usar GitHub Actions para automatizar tareas como crear, probar e implementar tu código.

  • Terraform es una herramienta de código abierto de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar infraestructuras locales y en la nube.

Repositorio de código

El código de este patrón está disponible en el repositorio GitHub Docker ECR Actions Workflow.

  • Al crear GitHub acciones, los archivos de flujo de trabajo de Docker se guardan en la /.github/workflows/ carpeta de este repositorio. El flujo de trabajo de esta solución se encuentra en el archivo workflow.yaml.

  • La e2e-test carpeta proporciona un ejemplo de Dockerfile para consultarlo y probarlo.

Prácticas recomendadas

Epics

TareaDescripciónHabilidades requeridas

Configure OpenID Connect.

Cree un proveedor de OpenID Connect (OIDC). Utilizará el proveedor en la política de confianza para el rol de IAM utilizado en esta acción. Para obtener instrucciones, consulte Configuración de OpenID Connect en Amazon Web Services en la GitHub documentación.

Administrador de AWS DevOps, AWS general

Clona el GitHub repositorio.

Clona el repositorio de GitHub Docker ECR Actions Workflow en tu carpeta local:

$git clone https://github.com/aws-samples/docker-ecr-actions-workflow
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Personalice el evento que inicia el flujo de trabajo de Docker.

El flujo de trabajo de esta solución está en workflow.yaml. Este script está configurado actualmente para implementar recursos cuando recibe el evento. workflow_dispatch Puede personalizar esta configuración cambiando el evento a otro flujo de trabajo principal workflow_call y llamando al flujo de trabajo desde él.

DevOps ingeniero

Personalice el flujo de trabajo.

El archivo workflow.yaml está configurado para crear un flujo de trabajo dinámico y reutilizable. GitHub Puedes editar este archivo para personalizar la configuración predeterminada, o puedes pasar los valores de entrada desde la consola de GitHub Actions si utilizas el workflow_dispatch evento para iniciar la implementación manualmente.

  • Asegúrese de especificar el ID de cuenta de AWS y la región de destino correctos.

  • Cree una política de ciclo de vida de Amazon ECR (consulte la política de ejemplo) y actualice la ruta predeterminada (e2e-test/policy.json) en consecuencia.

  • El archivo de flujo de trabajo requiere dos funciones de IAM como entrada:

    • Un rol de IAM que tiene permisos para configurar el backend de Amazon S3 para Terraform (consulte la sección Requisitos previos). Puede actualizar el nombre del rol predeterminado en. workload-assumable-role yamlarchivar en consecuencia.

    • Un rol de IAM que tiene permisos de acceso GitHub. Esta función también se utiliza en la política de Amazon ECR para restringir las operaciones de Amazon ECR. Para obtener más información, consulte el archivo data.tf.

DevOps ingeniero

Implemente las plantillas de Terraform.

El flujo de trabajo implementa automáticamente las plantillas de Terraform que crean el repositorio de Amazon ECR, en función del GitHub evento que haya configurado. Estas plantillas están disponibles como .tf archivos en la raíz del repositorio de Github.

AWS DevOps, DevOps ingeniero

Resolución de problemas

ProblemaSolución

Problemas o errores al configurar Amazon S3 y DynamoDB como el backend remoto de Terraform.

Siga las instrucciones de la documentación de Terraform para configurar los permisos necesarios en los recursos de Amazon S3 y DynamoDB para la configuración del backend remoto.

No se pudo ejecutar ni iniciar el flujo de trabajo con el evento. workflow_dispatch

El flujo de trabajo que está configurado para implementarse desde el workflow_dispatch evento solo funcionará si también está configurado en la rama principal.

Recursos relacionados