

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
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Resumen
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

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 que se cometan errores humanos y reduce sustancialmente el tiempo de implementación.

Una GitHub acción de envío a la rama principal de tu 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, inserta la imagen de Dockerfile en un repositorio de Amazon ECR.

## Requisitos previos y limitaciones
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Una GitHub cuenta activa.
+ Un [GitHub repositorio](https://docs.github.com/en/get-started/quickstart/create-a-repo).
+ La versión 1 o posterior de Terraform [instalada y configurada](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Un bucket de Amazon Simple Storage Service (Amazon S3) para el [backend de Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3).
+ Una tabla de [Amazon DynamoDB](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) para el bloqueo y la coherencia del estado de Terraform. La tabla debe tener una clave de partición denominada `LockID` con un tipo de `String`. Si no está configurado, se deshabilitará el bloqueo por estado.
+ Un rol de AWS Identity and Access Management (IAM) con permisos para configurar el backend de Amazon S3 para Terraform. Para obtener instrucciones sobre la configuración, consulte la [documentación de Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration).

**Limitaciones**

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

## Arquitectura
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Pila de tecnología de destino**
+ Repositorio de 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.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


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 e inserta la imagen en el repositorio de Amazon ECR.

## Tools (Herramientas)
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Servicios de Amazon**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de contenedor administrado que es seguro, escalable y fiable.

**Otras herramientas**
+ [GitHub Actions](https://docs.github.com/en/actions) está integrado en la GitHub plataforma para ayudarte a crear, compartir y ejecutar flujos de trabajo en tus GitHub repositorios. Puedes usar GitHub Actions para automatizar tareas como crear, probar e implementar tu código.
+ [Terraform](https://developer.hashicorp.com/terraform/intro) es una herramienta 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 de flujos de trabajo de GitHub [Docker ECR](https://github.com/aws-samples/docker-ecr-actions-workflow) Actions.
+ 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](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml).
+ La carpeta `e2e-test` proporciona un ejemplo de Dockerfile para consultarlo y probarlo.

## Prácticas recomendadas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ Para conocer las prácticas recomendadas para escribir Dockerfiles, consulte la [documentación de Docker](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).
+ Use un [punto de conexión de VPC para Amazon ECR](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). Los puntos de enlace de VPC funcionan con AWS PrivateLink, una tecnología que le permite acceder de forma privada a Amazon ECR a APIs través de direcciones IP privadas. Para las tareas de Amazon ECS que utilizan el tipo de lanzamiento Fargate, el punto de conexión de VPC permite a la tarea extraer imágenes privadas de Amazon ECR sin necesidad de asignar una dirección IP pública a la tarea.

## Epics
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Configure el proveedor y el repositorio del OIDC GitHub
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure OpenID Connect. | Cómo crear un proveedor de OpenID Connect (OIDC) Usará el proveedor de la política de confianza para el rol de IAM que se use en esta acción. Para obtener instrucciones, consulte [Configuración de OpenID Connect en Amazon Web Services](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-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](https://github.com/aws-samples/docker-ecr-actions-workflow) en tu carpeta local:<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps ingeniero | 

### Personalice el flujo de trabajo GitHub reutilizable e implemente la imagen de Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Personalice del evento que inicia el flujo de trabajo de Docker. | El flujo de trabajo de esta solución se encuentra en [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml). Actualmente, este script está configurado para implementar recursos cuando recibe el evento `workflow_dispatch`. Para personalizar esta configuración, cambe el evento a `workflow_call` y llame al flujo de trabajo desde otro flujo de trabajo principal. | DevOps ingeniero | 
| Personalice el flujo de trabajo. | El archivo [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/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.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | 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 archivos `.tf` en la [raíz del repositorio de Github](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps ingeniero | 

## Resolución de problemas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Problema | Solució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](https://developer.hashicorp.com/terraform/language/settings/backends/s3) 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 evento `workflow_dispatch` solo funcionará si también está configurado en la rama principal. | 

## Recursos relacionados
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Reutilización de flujos de trabajo](https://docs.github.com/en/actions/using-workflows/reusing-workflows) (GitHub documentación)
+ [Activación de un flujo de trabajo (documentación](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow)) GitHub 