Utilisation de la branche de plateforme Amazon ECS - AWS Elastic Beanstalk

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.

Utilisation de la branche de plateforme Amazon ECS

Cette rubrique aborde à la fois a branche plateforme Amazon ECS sur Amazon Linux 2 et la branche plateforme qu'elle remplace, Docker multiconteneurs sur AL1 (également géré par ECS). Sauf indication contraire, toutes les informations contenues dans cette rubrique s'appliquent aux deux branches de la plateforme.

Note

Le 18 juillet 2022, Elastic Beanstalk définira les statuts de toutes les branches de plateforme basées sur une AMI Amazon Linux (AL1) sur mise hors service.

Migration à partir de Docker multiconteneurs sur AL1

Si vous utilisez actuellement l'ancien Docker multiconteneurs s'exécutant sur la branche de plateforme AL1, vous pouvez migrer vers la dernière branche de plateforme ECS s'exécutant sur AL2023. La dernière branche de plateforme prend en charge toutes les fonctions de la branche de plateforme abandonnée. Aucune modification du code source n'est requise. Pour de plus amples informations, veuillez consulter Migration de Docker multiconteneurs s'exécutant sur Amazon Linux vers ECS sur Amazon Linux 2023.

Plateforme Docker gérée par ECS

Elastic Beanstalk utilise Amazon Elastic Container Service (Amazon ECS) pour coordonner les déploiements de conteneurs vers des environnements Docker gérés par ECS. Amazon ECS fournit des outils permettant de gérer un cluster d'instances exécutant des conteneurs Docker. Elastic Beanstalk prend en charge les tâches Amazon ECS, y compris la création de clusters, la définition et l'exécution des tâches. Chacune des instances de l'environnement exécute le même ensemble de conteneurs, qui sont définis dans un fichier Dockerrun.aws.json v2. Afin de tirer pleinement parti de Docker, Elastic Beanstalk vous permet de créer un environnement dans lequel vos instances Amazon EC2 exécutent plusieurs conteneurs Docker côte à côte.

Le schéma suivant présente un exemple d'environnement Elastic Beanstalk configuré avec trois conteneurs Docker exécutés sur chaque instance Amazon EC2 d'un groupe Auto Scaling :

Note

Elastic Beanstalk offre des fonctionnalités d'extensibilité pour toutes ses platesformes que vous pouvez utiliser pour personnaliser le déploiement et l'exécution de vos applications. Pour ECS s'exécutant sur Amazon Linux 2, l'implémentation du flux de déploiement d'instance de ces fonctions varie des autres plateformes. Pour de plus amples informations, veuillez consulter Flux de déploiement d'instance pour ECS s'exécutant sur Amazon Linux 2 et versions ultérieures.

Dockerrun.aws.json file

Les instances de conteneur (Amazon EC2 exécutant un Docker géré par ECS dans un environnement Elastic Beanstalk) requièrent un fichier de configuration nommé Dockerrun.aws.json. Ce fichier est propre à Elastic Beanstalk. Il peut être utilisé seul ou combiné au code source et au contenu d'un bundle de fichiers source afin de créer un environnement sur une plateforme Docker.

Note

La version 1 du format Dockerrun.aws.json permet de lancer un conteneur Docker unique dans un environnement Elastic Beanstalk s'exécutant sur Amazon Linux AMI (la version qui précède Amazon Linux 2). L'environnement repose sur le la branche de plateforme Docker s'exécutant sur Amazon Linux 64 bits, qui sera retirée le 18 juillet 2022 . Pour en savoir plus sur le format Dockerrun.aws.json v1, consultez Configuration de la plateforme Docker sans Docker Compose.

La version 2 du format Dockerrun.aws.json ajoute la prise en charge de plusieurs conteneurs par instance Amazon EC2 et ne peut être utilisée qu'avec la plateforme Docker multiconteneurs gérée par ECS. Le format varie considérablement par rapport à la version précédente.

Pour obtenir des détails sur le format mis à jour ainsi qu'un exemple de fichier, veuillez consulter Dockerrun.aws.json v2.

Images Docker

La plateforme Docker gérée par ECS pour Elastic Beanstalk nécessite que des images soient préconstruites et stockées dans un référentiel d'images en ligne public ou privé.

Note

La création d'images personnalisées pendant le déploiement via un Dockerfile n'est pas prise en charge par la plateforme Docker gérée par ECS sur Elastic Beanstalk. Créez vos images et déployez-les dans un référentiel en ligne avant de créer un environnement Elastic Beanstalk.

Spécifiez des images par nom dans Dockerrun.aws.json v2. Notez ces conventions :

  • Les images dans les référentiels officiels sur Docker Hub utilisent un nom unique (par exemple, ubuntu ou mongo).

  • Les images dans les autres référentiels sur Docker Hub sont qualifiées par un nom d'organisation (par exemple, amazon/amazon-ecs-agent).

  • Les images dans les autres référentiels en ligne sont qualifiées par un nom de domaine (par exemple, quay.io/assemblyline/ubuntu).

Pour configurer Elastic Beanstalk afin qu'il s'authentifie auprès d'un référentiel privé, incluez le paramètre authentication dans votre fichier Dockerrun.aws.json v2.

Rôle de l'instance de conteneur

Elastic Beanstalk utilise une AMI optimisée pour Elastic Beanstalk avec un agent de conteneur Amazon ECS qui s'exécute dans un conteneur Docker. L'agent communique avec Amazon ECS pour coordonner les déploiements de conteneur. Afin de communiquer avec Amazon ECS, chaque instance Amazon EC2 doit disposer des autorisations correspondantes dans IAM. Ces autorisations sont associées au profil d'instance par défaut lorsque vous créez un environnement dans la console de gestion Elastic Beanstalk :

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECSAccess", "Effect": "Allow", "Action": [ "ecs:Poll", "ecs:StartTask", "ecs:StopTask", "ecs:DiscoverPollEndpoint", "ecs:StartTelemetrySession", "ecs:RegisterContainerInstance", "ecs:DeregisterContainerInstance", "ecs:DescribeContainerInstances", "ecs:Submit*" ], "Resource": "*" } ] }

Si vous créez votre propre profil d'instance, vous pouvez associer la stratégie gérée AWSElasticBeanstalkMulticontainerDocker pour faire en sorte que les autorisations restent à jour. Pour obtenir des instructions sur la création de stratégies et de rôles dans IAM, veuillez consulter Création de rôles IAM dans le Guide de l'utilisateur IAM.

Ressources Amazon ECS créées par Elastic Beanstalk

Lorsque vous créez un environnement via la plateforme Docker gérée par ECS, Elastic Beanstalk crée et configure automatiquement plusieurs ressources Amazon Elastic Container Service tout en créant l'environnement. Ce faisant, il crée les conteneurs nécessaires sur chaque instance Amazon EC2.

  • Cluster Amazon ECS – Dans Amazon ECS, les instances de conteneur sont organisées en clusters. En cas d'utilisation avec Elastic Beanstalk, un cluster est toujours créé pour chaque environnement Docker géré par ECS.

  • Définition de tâche Amazon ECS : Elastic Beanstalk utilise le fichier Dockerrun.aws.json v2 dans votre projet pour générer la définition de tâche Amazon ECS qui est utilisée pour configurer les instances de conteneur dans l'environnement.

  • Tâche Amazon ECS – Elastic Beanstalk communique avec Amazon ECS pour exécuter une tâche sur chaque instance de l'environnement afin de coordonner le déploiement de conteneur. Dans un environnement évolutif, Elastic Beanstalk lance une nouvelle tâche chaque fois qu'une instance est ajoutée au cluster. Dans de rares cas, vous devrez peut-être accroître la quantité d'espace réservée aux conteneurs et aux images. Pour en savoir plus, reportez-vous à la section Configuration des environnements Docker.

  • Agent de conteneur Amazon ECS – L'agent s'exécute dans un conteneur Docker sur les instances de votre environnement. L'agent interroge Amazon ECS service et attend l'exécution d'une tâche.

  • Volumes de données Amazon ECS : pour faciliter la collecte des journaux, Elastic Beanstalk insère les définitions des volumes (en plus des volumes que vous définissez dans Dockerrun.aws.json v2) dans la définition de tâche.

    Elastic Beanstalk crée des volumes de fichiers journaux sur l'instance de conteneur (un pour chaque conteneur), à l'emplacement /var/log/containers/containername. Ces volumes sont nommés awseb-logs-containername et sont fournis pour être montés par les conteneurs. Pour de plus amples informations sur la façon de les monter, veuillez consulter Format des définitions de conteneur.

Utilisation de plusieurs écouteurs Elastic Load Balancing

Vous pouvez configurer plusieurs écouteurs Elastic Load Balancing dans un environnement Docker géré par ECS afin de prendre en charge le trafic entrant pour les proxys ou autres services qui ne fonctionnent pas sur le port HTTP par défaut.

Créez un dossier .ebextensions dans votre bundle de fichiers source et ajoutez un fichier avec une extension .config. L'exemple suivant présente un fichier de configuration qui crée un écouteur Elastic Load Balancing sur le port 8080.

.ebextensions/elb-listener.config

option_settings: aws:elb:listener:8080: ListenerProtocol: HTTP InstanceProtocol: HTTP InstancePort: 8080

Si votre environnement s'exécute dans un Amazon Virtual Private Cloud (Amazon VPC) personnalisé que vous avez créé, Elastic Beanstalk s'occupe du reste. Dans un VPC par défaut, vous devez configurer le groupe de sécurité de votre instance pour autoriser le trafic entrant provenant de l'équilibreur de charge. Ajoutez un deuxième fichier de configuration, qui ajoute une règle de trafic entrant au groupe de sécurité :

.ebextensions/elb-ingress.config

Resources: port8080SecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 8080 FromPort: 8080 SourceSecurityGroupName: { "Fn::GetAtt": ["AWSEBLoadBalancer", "SourceSecurityGroup.GroupName"] }

Pour de plus amples informations sur le format du fichier de configuration, veuillez consulter Ajout et personnalisation des ressources de l'environnement Elastic Beanstalk et Paramètres d'option.

En plus d'ajouter un écouteur à la configuration Elastic Load Balancing et d'ouvrir un port dans le groupe de sécurité, vous devez mapper le port sur l'instance de l'hôte à un port sur le conteneur Docker, dans la section containerDefinitions du fichier Dockerrun.aws.json v2. L'extrait suivant en présente un exemple:

"portMappings": [ { "hostPort": 8080, "containerPort": 8080 } ]

Consultez Dockerrun.aws.json v2 pour de plus amples informations sur le format du fichier Dockerrun.aws.json v2.

Échec de déploiements de conteneurs

En cas d'échec d'une tâche Amazon ECS, un ou plusieurs conteneurs de votre environnement Elastic Beanstalk ne démarreront pas. Elastic Beanstalk ne restaure pas les environnements multiconteneurs suite à l'échec d'une tâche Amazon ECS. Si le démarrage d'un conteneur échoue dans votre environnement, redéployez la version actuelle ou une version de travail précédente à partir de la console Elastic Beanstalk.

Pour déployer une version existante
  1. Ouvrez la console Elastic Beanstalk dans la région de votre environnement.

  2. Cliquez sur Actions à droite du nom de votre application, puis cliquez sur View application versions (Afficher les versions de l'application).

  3. Sélectionnez une version de votre application, puis cliquez sur Déploiement.