

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Créez et envoyez des images Docker vers Amazon ECR à l'aide d' GitHub Actions et de Terraform
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

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

Ce modèle explique comment créer des GitHub flux de travail réutilisables pour créer votre Dockerfile et transférer l'image résultante vers Amazon Elastic Container Registry (Amazon ECR). Le modèle automatise le processus de création de vos Dockerfiles à l'aide de Terraform et d'Actions. GitHub Cela minimise le risque d'erreur humaine et réduit considérablement le temps de déploiement.

Une action GitHub push sur la branche principale de votre GitHub dépôt déclenche le déploiement des ressources. Le flux de travail crée un référentiel Amazon ECR unique basé sur la combinaison de l' GitHub organisation et du nom du référentiel. Il envoie ensuite l'image Dockerfile vers le référentiel Amazon ECR.

## Conditions préalables et limitations
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Prérequis**
+ Un compte AWS actif.
+ Un GitHub compte actif.
+ Un [GitHub référentiel](https://docs.github.com/en/get-started/quickstart/create-a-repo).
+ Terraform version 1 ou ultérieure [installée et configurée](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ [Un bucket Amazon Simple Storage Service (Amazon S3) pour le backend Terraform.](https://developer.hashicorp.com/terraform/language/settings/backends/s3)
+ Une table [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) pour le verrouillage de l'état et la cohérence de Terraform. La table doit avoir une clé de partition nommée `LockID` avec un type de`String`. Si cela n'est pas configuré, le verrouillage d'état sera désactivé.
+ Rôle AWS Identity and Access Management (IAM) autorisé à configurer le backend Amazon S3 pour Terraform. Pour les instructions de configuration, consultez la documentation [Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration).

**Limites**

Ce code réutilisable a été testé uniquement avec des GitHub actions.

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

**Pile technologique cible**
+ Référentiel Amazon ECR
+ GitHub Actions
+ Terraform

**Architecture cible**

![Flux de travail pour créer des GitHub flux de travail réutilisables afin de créer Dockerfile et de transférer l'image vers Amazon ECR.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


Le diagramme illustre les éléments suivants :

1. Un utilisateur ajoute un Dockerfile et des modèles Terraform au référentiel. GitHub 

2. Ces ajouts initient un flux de travail GitHub Actions.

3. Le flux de travail vérifie l'existence d'un référentiel Amazon ECR. Dans le cas contraire, il crée le référentiel en fonction de l' GitHub organisation et du nom du référentiel.

4. Le flux de travail crée le Dockerfile et envoie l'image vers le référentiel Amazon ECR.

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

**Services Amazon**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service de registre de conteneurs géré sécurisé, évolutif et fiable.

**Autres outils**
+ [GitHub Actions](https://docs.github.com/en/actions) est intégré à la GitHub plateforme pour vous aider à créer, partager et exécuter des flux de travail au sein de vos GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser des tâches telles que la création, le test et le déploiement de votre code.
+ [Terraform](https://developer.hashicorp.com/terraform/intro) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer une infrastructure cloud et sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow).
+ Lorsque vous créez des GitHub actions, les fichiers de flux de travail Docker sont enregistrés dans le `/.github/workflows/` dossier de ce référentiel. Le flux de travail de cette solution se trouve dans le fichier [workflow.yaml.](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml)
+ Le `e2e-test` dossier fournit un exemple de Dockerfile à des fins de référence et de test.

## Bonnes pratiques
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ Pour connaître les meilleures pratiques en matière d'écriture de Dockerfiles, consultez la documentation [Docker](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).
+ Utilisez un point de [terminaison VPC pour Amazon ECR](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). Les points de terminaison VPC sont alimentés par AWS PrivateLink, une technologie qui vous permet d'accéder en privé à Amazon ECR APIs via des adresses IP privées. Pour les tâches Amazon ECS qui utilisent le type de lancement Fargate, le point de terminaison VPC permet à la tâche d'extraire des images privées d'Amazon ECR sans attribuer d'adresse IP publique à la tâche.

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

### Configuration du fournisseur et GitHub du référentiel OIDC
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez OpenID Connect. | Créez un fournisseur OpenID Connect (OIDC). Vous utiliserez le fournisseur dans la politique de confiance pour le rôle IAM utilisé dans cette action. Pour obtenir des instructions, consultez [la section Configuration d'OpenID Connect dans Amazon Web Services](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) dans la GitHub documentation. | Administrateur AWS, AWS DevOps, AWS général | 
| Clonez le GitHub dépôt. | Clonez le référentiel GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow) dans votre dossier local :<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps ingénieur | 

### Personnalisez le flux de travail GitHub réutilisable et déployez l'image Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Personnalisez l'événement qui lance le flux de travail Docker. | Le flux de travail de cette solution se trouve dans [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml). Ce script est actuellement configuré pour déployer des ressources lorsqu'il reçoit l'`workflow_dispatch`événement. Vous pouvez personnaliser cette configuration en remplaçant l'événement par un autre flux de travail parent `workflow_call` et en appelant le flux de travail à partir d'un autre flux de travail parent. | DevOps ingénieur | 
| Personnalisez le flux de travail. | Le fichier [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) est configuré pour créer un flux de travail dynamique et réutilisable. GitHub Vous pouvez modifier ce fichier pour personnaliser la configuration par défaut, ou vous pouvez transmettre les valeurs d'entrée depuis la console GitHub Actions si vous utilisez l'`workflow_dispatch`événement pour lancer le déploiement manuellement.[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps ingénieur | 
| Déployez les modèles Terraform. | Le flux de travail déploie automatiquement les modèles Terraform qui créent le référentiel Amazon ECR, en fonction de l' GitHub événement que vous avez configuré. Ces modèles sont disponibles sous forme de `.tf` fichiers à la [racine du référentiel Github](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps ingénieur | 

## Résolution des problèmes
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Problèmes ou erreurs lorsque vous configurez Amazon S3 et DynamoDB en tant que backend distant Terraform. | Suivez les instructions de la [documentation Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3) pour configurer les autorisations requises sur les ressources Amazon S3 et DynamoDB pour la configuration du backend distant. | 
| Impossible d'exécuter ou de démarrer le flux de travail avec l'`workflow_dispatch`événement. | Le flux de travail configuré pour être déployé à partir de l'`workflow_dispatch`événement ne fonctionnera que s'il est également configuré sur la branche principale. | 

## Ressources connexes
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Réutilisation des flux de travail](https://docs.github.com/en/actions/using-workflows/reusing-workflows) (GitHub documentation)
+ [Déclenchement d'un flux de travail](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) (GitHub documentation)