Prérequis
Avant de créer votre workflow GitHub Actions, vous devez suivre les étapes de configuration suivantes pour Amazon ECR et ECS :
-
Créez un référentiel Amazon ECR pour stocker vos images.
Par exemple à l’aide de l’interface CLI AWS :
Bash aws ecr create-repository \ --repository-name MY_ECR_REPOSITORY \ --region MY_AWS_REGIONaws ecr create-repository \ --repository-name MY_ECR_REPOSITORY \ --region MY_AWS_REGIONVérifiez que vous utilisez le même nom de référentiel Amazon ECR (représenté ici par
MY_ECR_REPOSITORY) pour la variableECR_REPOSITORYdans le flux de travail ci-dessous.Vérifiez que vous utilisez la même valeur de région AWS pour la variable
AWS_REGION(représentée ici parMY_AWS_REGION) dans le flux de travail ci-dessous. -
Créez une définition de tâche, un cluster et un service Amazon ECS.
Pour plus d’informations, suivez l’assistant de démarrage sur la console Amazon ECS ou le guide de démarrage dans la documentation Amazon ECS.
Veillez à noter les noms que vous avez définis pour le service et le cluster Amazon ECS et à les utiliser pour les variables
ECS_SERVICEetECS_CLUSTERdans le flux de travail ci-dessous. -
Stockez votre définition de tâche Amazon ECS en tant que fichier JSON dans votre référentiel GitHub.
Le format du fichier doit être identique à la sortie générée par :
Bash aws ecs register-task-definition --generate-cli-skeleton
aws ecs register-task-definition --generate-cli-skeletonVérifiez que vous définissez la variable
ECS_TASK_DEFINITIONdans le flux de travail ci-dessous comme chemin d’accès au fichier JSON.Vérifiez que vous définissez la variable
CONTAINER_NAMEdans le flux de travail ci-dessous comme nom du conteneur dans la sectioncontainerDefinitionsde la définition de tâche. -
Créez des secrets GitHub Actions nommés
AWS_ACCESS_KEY_IDetAWS_SECRET_ACCESS_KEYpour stocker les valeurs de votre clé d’accès Amazon IAM.Pour plus d’informations sur la création des secrets pour GitHub Actions, consultez « Utilisation de secrets dans GitHub Actions ».
Consultez la documentation de chaque action utilisée ci-dessous pour les stratégies IAM recommandées pour l’utilisateur IAM et les méthodes de gestion des informations d’identification de clé d’accès.
-
Si vous le souhaitez, configurez un environnement de déploiement. Les environnements sont utilisés pour décrire une cible de déploiement général comme
production,stagingoudevelopment. Quand un workflow GitHub Actions est déployé dans un environnement, l’environnement s’affiche dans la page principale du dépôt. Vous pouvez utiliser les environnements pour exiger l’approbation d’un travail, restreindre les branches pouvant déclencher un flux de travail, contrôler les déploiements avec des règles personnalisées de protection des déploiements ou limiter l’accès aux secrets. Pour plus d’informations sur la création d’environnements, consultez Gestion des environnements pour le déploiement.
Création du workflow
Une fois les conditions préalables remplies, vous pouvez procéder à la création du workflow.
L’exemple de flux de travail suivant montre comment créer une image conteneur et l’envoyer à Amazon ECR. Il met ensuite à jour la définition de tâche avec le nouvel ID d’image et déploie la définition de tâche sur Amazon ECS.
Vérifiez que vous fournissez vos propres valeurs pour toutes les variables dans la clé env du flux de travail.
Si vous avez configuré un environnement de déploiement, remplacez la valeur environment par le nom de votre environnement. Si vous n’avez pas configuré d’environnement ou si votre workflow se trouve dans un référentiel privé et que vous n’utilisez pas GitHub Enterprise Cloud, supprimez la clé environment.
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.
# GitHub recommande d’épingler les actions à un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.
name: Deploy to Amazon ECS
on:
push:
branches:
- main
env:
AWS_REGION: MY_AWS_REGION # set this to your preferred AWS region, e.g. us-west-1
ECR_REPOSITORY: MY_ECR_REPOSITORY # set this to your Amazon ECR repository name
ECS_SERVICE: MY_ECS_SERVICE # set this to your Amazon ECS service name
ECS_CLUSTER: MY_ECS_CLUSTER # set this to your Amazon ECS cluster name
ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition
# file, e.g. .aws/task-definition.json
CONTAINER_NAME: MY_CONTAINER_NAME # set this to the name of the container in the
# containerDefinitions section of your task definition
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@0e613a0980cbf65ed5b322eb7a1e075d28913a83
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@62f4f872db3836360b72999f4b87f1ff13310f3a
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
run: |
# Build a docker container and
# push it to ECR so that it can
# be deployed to ECS.
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@c804dfbdd57f713b6c079302a4c01db7017a36fc
with:
task-definition: ${{ env.ECS_TASK_DEFINITION }}
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@df9643053eda01f169e64a0e60233aacca83799a
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.
# GitHub recommande d’épingler les actions à un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.
name: Deploy to Amazon ECS
on:
push:
branches:
- main
env:
AWS_REGION: MY_AWS_REGION # set this to your preferred AWS region, e.g. us-west-1
ECR_REPOSITORY: MY_ECR_REPOSITORY # set this to your Amazon ECR repository name
ECS_SERVICE: MY_ECS_SERVICE # set this to your Amazon ECS service name
ECS_CLUSTER: MY_ECS_CLUSTER # set this to your Amazon ECS cluster name
ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition
# file, e.g. .aws/task-definition.json
CONTAINER_NAME: MY_CONTAINER_NAME # set this to the name of the container in the
# containerDefinitions section of your task definition
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@0e613a0980cbf65ed5b322eb7a1e075d28913a83
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@62f4f872db3836360b72999f4b87f1ff13310f3a
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
run: |
# Build a docker container and
# push it to ECR so that it can
# be deployed to ECS.
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@c804dfbdd57f713b6c079302a4c01db7017a36fc
with:
task-definition: ${{ env.ECS_TASK_DEFINITION }}
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@df9643053eda01f169e64a0e60233aacca83799a
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true
Pour aller plus loin
Pour le modèle de workflow d’origine, consultez aws.yml dans le référentiel GitHub Actions starter-workflows.
Pour plus d’informations sur les services utilisés dans ces exemples, consultez la documentation suivante :
- « Meilleures pratiques de sécurité dans IAM » dans la documentation Amazon AWS.
- Action officielle AWS « Configurer les informations d’identification AWS ».
- Action officielle AWS « Connexion » Amazon ECR.
- Action officielle AWS « Définition de tâche de rendu » Amazon ECS.
- Action officielle AWS « Définition de tâche de déploiement » Amazon ECS.