Utilisation d'images provenant d'un dépôt privé dans Elastic Beanstalk - 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 d'images provenant d'un dépôt privé dans Elastic Beanstalk

Cette rubrique explique comment s'authentifier auprès d'un référentiel d'images privé en ligne avec Elastic Beanstalk. Elastic Beanstalk doit s'authentifier auprès du registre en ligne avant de pouvoir extraire et déployer vos images. Il existe plusieurs options de configuration.

Utilisation d'images provenant d'un ECR référentiel Amazon

Vous pouvez stocker vos images Docker personnalisées dans AWS avec Amazon Elastic Container Registry (AmazonECR).

Lorsque vous stockez vos images Docker sur AmazonECR, Elastic Beanstalk s'authentifie automatiquement auprès du registre Amazon à ECR l'aide du profil d'instance de votre environnement. Par conséquent, vous devez autoriser vos instances à accéder aux images de votre ECR référentiel Amazon. Pour ce faire, ajoutez des autorisations au profil d'instance de votre environnement en attachant la politique EC2ContainerRegistryReadOnly gérée par Amazon au profil d'instance. Cela fournit un accès en lecture seule à tous les ECR référentiels Amazon de votre compte. Vous avez également la possibilité de n'accéder qu'à un seul référentiel en utilisant le modèle suivant pour créer une politique personnalisée :

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEbAuth", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "AllowPull", "Effect": "Allow", "Resource": [ "arn:aws:ecr:us-east-2:account-id:repository/repository-name" ], "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ] } ] }

Remplacez le nom de la ressource Amazon (ARN) dans la politique ci-dessus par celui ARN de votre référentiel.

Vous devez spécifier les informations relatives à l'image dans votre Dockerrun.aws.json fichier. La configuration sera différente en fonction de la plateforme que vous utilisez.

Pour la plateforme Docker ECS gérée, utilisez la image clé dans un objet de définition de conteneur :

"containerDefinitions": [ { "name": "my-image", "image": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest",

Pour la plateforme Docker, reportez-vous à l'image deURL. URLCela se trouve dans la Image définition de votre Dockerrun.aws.json fichier :

"Image": { "Name": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest", "Update": "true" },

Utilisation de AWS Systems Manager (SSM) Magasin de paramètres

Vous pouvez configurer Elastic Beanstalk pour qu'il se connecte à votre référentiel privé avant de commencer le processus de déploiement. Cela permet à Elastic Beanstalk d'accéder aux images à partir du référentiel et de les déployer dans votre environnement Elastic Beanstalk.

Cette configuration initie des événements dans la phase de prégénération du processus de déploiement Elastic Beanstalk. La configuration a lieu dans le répertoire de configuration .ebextentions. La configuration utilise des scripts de hook de plateforme qui appellent docker login à s'authentifier auprès du registre en ligne qui héberge le référentiel privé. Voici une répartition détaillée de ces étapes de configuration.

Pour configurer Elastic Beanstalk afin de s'authentifier auprès de votre dépôt privé avec AWS SSM
Note

Vous devez configurer AWS Systems Manager pour effectuer ces étapes. Pour de plus amples informations, veuillez consulter le .AWS Systems Manager Guide de l'utilisateur

  1. Créez votre structure de répertoire .ebextensions comme suit.

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
  2. Utilisation de la AWS Systems ManagerParameter Store pour enregistrer les informations d'identification de votre référentiel privé afin qu'Elastic Beanstalk puisse les récupérer en cas de besoin. Pour cela, exécutez la commande put-parameter.

    aws ssm put-parameter --name USER --type String --value "username" aws ssm put-parameter --name PASSWD --type String --value "passwd"
  3. Créez le fichier env.config suivant et placez-le dans le répertoire .ebextensions comme indiqué dans la structure de répertoire précédente. Cette configuration utilise l'espace de noms aws:elasticbeanstalk:application:environment pour initialiser les variables d'environnement USER et PASSWD Elastic Beanstalk aux valeurs du Parameter Store. SSM

    Note

    Dans le script, USER et PASSWD doivent correspondre aux mêmes chaînes que celles utilisées dans les commandes ssm put-parameter précédentes.

    option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:ssm:USER:1}}' PASSWD: '{{resolve:ssm:PASSWD:1}}'
  4. Créez le fichier de script 01login.sh suivant et placez-le dans les répertoires suivants (comme illustré également dans la structure de répertoires précédente) :

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

    ### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin

    Le script 01login.sh appelle le script de plateforme get-config pour récupérer les informations d'identification du référentiel. Il enregistre le nom d'utilisateur dans la variable USER. Dans la ligne suivante, il récupère le mot de passe. Au lieu de stocker le mot de passe dans une variable, le script dirige le mot de passe directement vers la commande docker login dans le flux d’entrée stdin. L'option --password-stdin utilise le flux d'entrée, vous n'avez donc pas besoin de stocker le mot de passe dans une variable. Pour en savoir plus sur l'authentification à l'aide de l'interface de ligne de commande Docker, consultez Docker Login (Connexion à Docker) sur le site Web de documentation Docker.

    Remarques
    • Tous les fichiers de script doivent disposer d'une autorisation d'exécution. Utilisez la commande chmod +x pour définir l'autorisation d'exécution sur vos fichiers hook. Pour toutes les versions de platesformes basées sur Amazon Linux 2 publiées à partir du 29 avril 2022, Elastic Beanstalk accorde automatiquement des autorisations d'exécution à tous les scripts de hook de plateforme. Dans ce cas, vous n'avez pas besoin d'accorder manuellement les autorisations d'exécution. Pour obtenir la liste de ces versions de plate-forme, reportez-vous aux notes de mise à jour du 29 avril 2022 sur la plateforme Linux dans le AWS Elastic Beanstalk Guide des notes de mise à jour.

    • Les fichiers hook peuvent être des fichiers binaires ou des fichiers script commençant par une ligne #! et contenant leur chemin d'interpréteur, par exemple #!/bin/bash.

    • Pour de plus amples informations, veuillez consulter Hooks de plateforme dans Extension des plateformes Linux Elastic Beanstalk.

Une fois qu'Elastic Beanstalk peut s'authentifier auprès du registre en ligne qui héberge le référentiel privé, vos images peuvent être déployées et extraites.

Utilisation du fichier Dockerrun.aws.json

Cette section décrit une autre approche pour authentifier Elastic Beanstalk auprès d'un référentiel privé. Avec cette approche, vous générez un fichier d'authentification avec la commande Docker, puis téléchargez le fichier d'authentification dans un compartiment Amazon S3. Vous devez également inclure les informations du compartiment dans votre fichier Dockerrun.aws.json.

Pour générer un fichier d'authentification et le fournir à Elastic Beanstalk
  1. Générez un fichier d'authentification avec la commande docker login. Pour les référentiels sur Docker Hub, exécutez docker login:

    $ docker login

    Pour les autres registres, incluez celui URL du serveur de registre :

    $ docker login registry-server-url
    Note

    Si votre environnement Elastic Beanstalk utilise la version de la plateforme AMI Amazon Linux Docker (antérieure à Amazon Linux 2), lisez les informations pertinentes dans. Configuration de Docker sur Amazon Linux AMI (antérieur à Amazon Linux 2)

    Pour plus d'informations sur le fichier d'authentification, consultez Store images on Docker Hub et docker login sur le site web de Docker.

  2. Chargez une copie du fichier d'authentification nommé .dockercfg dans un compartiment Amazon S3 sécurisé.

    • Le compartiment Amazon S3 doit être hébergé dans le même Région AWS comme l'environnement qui l'utilise. Elastic Beanstalk ne peut pas télécharger de fichiers à partir d'un compartiment Amazon S3 hébergé dans d'autres régions.

    • Accordez des autorisations pour l's3:GetObjectopération au IAM rôle dans le profil d'instance. Pour de plus amples informations, veuillez consulter Gestion des profils d'instance Elastic Beanstalk.

  3. Incluez les informations sur le compartiment Amazon S3 dans le paramètre Authentication de votre fichier Dockerrun.aws.json.

    L'exemple suivant décrit comment utiliser un fichier d'authentification nommé mydockercfg dans un compartiment nommé amzn-s3-demo-bucket afin d'utiliser une image privée dans un registre tiers. Pour le numéro de version correct pourAWSEBDockerrunVersion, reportez-vous à la note qui suit l'exemple.

    { "AWSEBDockerrunVersion": "version-no", "Authentication": { "Bucket": "amzn-s3-demo-bucket", "Key": "mydockercfg" }, "Image": { "Name": "quay.io/johndoe/private-image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx" }
    Versions Dockerrun.aws.json

    Le paramètre AWSEBDockerrunVersion indique la version du fichier Dockerrun.aws.json.

    • Les plateformes Docker AL2 et AL2 023 utilisent les versions suivantes du fichier.

      • Dockerrun.aws.json v3— environnements utilisant Docker Compose.

      • Dockerrun.aws.json v1— environnements qui n'utilisent pas Docker Compose.

    • ECSexécuté sur Amazon Linux 2 et ECSexécuté sur AL2 023 utilise le Dockerrun.aws.json v2 fichier. La plate-forme retirée ECS-The Multicontainer Docker Amazon Linux AMI (AL1) utilisait également cette même version.

Une fois qu'Elastic Beanstalk peut s'authentifier auprès du registre en ligne qui héberge le référentiel privé, vos images peuvent être déployées et extraites.