Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.
GitHub AE is currently under limited release.

Déploiement sur Amazon Elastic Container Service

Vous pouvez effectuer un déploiement sur ECS (Amazon Elastic Container Service) dans le cadre de vos workflows de déploiement continu (CD).

Introduction

Ce guide explique comment utiliser GitHub Actions pour créer une application conteneurisée, l’envoyer (push) à Amazon Elastic Container Registry (INTUNE) et la déployer sur Amazon Elastic Container Service (ECS) en cas d’envoi (push) vers la branche main.

À chaque envoi (push) main dans votre référentiel GitHub, le workflow GitHub Actions génère et envoie (push) une nouvelle image conteneur vers Amazon ECR, puis déploie une nouvelle définition de tâche vers Amazon ECS.

Prérequis

Avant de créer votre workflow GitHub Actions, vous devez suivre les étapes de configuration suivantes pour Amazon ECR et ECS :

  1. Créez un référentiel Amazon ECR pour stocker vos images.

    Par exemple à l’aide de l’interface CLI AWS :

    Shell
        --repository-name MY_ECR_REPOSITORY \
        --region MY_AWS_REGION

    Ensure that you use the same Amazon ECR repository name (represented here by MY_ECR_REPOSITORY) for the ECR_REPOSITORY variable in the workflow below.

    Ensure that you use the same AWS region value for the AWS_REGION (represented here by MY_AWS_REGION) variable in the workflow below.

  2. Create an Amazon ECS task definition, cluster, and service.

    For details, follow the Getting started wizard on the Amazon ECS console, or the Getting started guide in the Amazon ECS documentation.

    Ensure that you note the names you set for the Amazon ECS service and cluster, and use them for the ECS_SERVICE and ECS_CLUSTER variables in the workflow below.

  3. Store your Amazon ECS task definition as a JSON file in your GitHub repository.

    The format of the file should be the same as the output generated by:

    Shell
    aws ecs register-task-definition --generate-cli-skeleton

    Ensure that you set the ECS_TASK_DEFINITION variable in the workflow below as the path to the JSON file.

    Ensure that you set the CONTAINER_NAME variable in the workflow below as the container name in the containerDefinitions section of the task definition.

  4. Create GitHub Actions secrets named AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY to store the values for your Amazon IAM access key.

    For more information on creating secrets for GitHub Actions, see "Encrypted secrets."

    See the documentation for each action used below for the recommended IAM policies for the IAM user, and methods for handling the access key credentials.

  5. Optionally, configure a deployment environment. Les environnements sont utilisés pour décrire une cible de déploiement général comme production, staging ou development. 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 des environnements pour exiger l’approbation d’un travail, restreindre les branches pouvant déclencher un workflow ou limiter l’accès aux secrets. Pour plus d’informations sur la création d’environnements, consultez « Utilisation d’environnements pour le déploiement ».

Creating the workflow

Once you've completed the prerequisites, you can proceed with creating the workflow.

The following example workflow demonstrates how to build a container image and push it to Amazon ECR. It then updates the task definition with the new image ID, and deploys the task definition to Amazon ECS.

Ensure that you provide your own values for all the variables in the env key of the workflow.

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 , supprimez la clé environment.

YAML
# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Elles sont fournies par un tiers et régies par
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# <a name="documentation"></a>documentation en ligne.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub recommande d’épingler les actions à un SHA de commit.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>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@v2

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@13d241b293754004c80624b5567555c4a39ffbe3
        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@aaf69d68aa3fb14c1d5a6be9ac61fe15b48453a2

      - 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 "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"

      - name: Fill in the new image ID in the Amazon ECS task definition
        id: task-def
        uses: aws-actions/amazon-ecs-render-task-definition@97587c9d45a4930bf0e3da8dd2feb2a463cf4a3a
        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@de0132cf8cdedb79975c6d42b77eb7ea193cf28e
        with:
          task-definition: ${{ steps.task-def.outputs.task-definition }}
          service: ${{ env.ECS_SERVICE }}
          cluster: ${{ env.ECS_CLUSTER }}
          wait-for-service-stability: true

Ressources supplémentaires

Pour le workflow de démarrage 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 :