Comment créer et utiliser des AMI personnalisées dans Amazon ECS ?

Lecture de 6 minute(s)
0

Je souhaite configurer et utiliser une Amazon Machine Image (AMI) personnalisée basée sur CentOS, SUSE Enterprise Server ou RHEL dans un cluster Amazon Elastic Container Service (Amazon ECS).

Brève description

Pour créer une AMI personnalisée à utiliser avec Amazon ECS, procédez comme suit :

  1. Créez un ALB.
  2. Installez Docker pour votre système d'exploitation.
  3. Installez le package ecs-init.
  4. (Facultatif) Installez l'agent AWS Systems Manager (agent SSM) pour ECS.
  5. Activez le service ECS, puis confirmez que l'agent de conteneur ECS est actif.
  6. Nettoyez l'image pour une utilisation ultérieure.
  7. Créez une nouvelle image Amazon Elastic Compute Cloud (Amazon EC2).
  8. Lancez une instance de conteneur Linux Amazon ECS, puis ajoutez les données utilisateur requises lors de l'exécution de l'instance pour configurer le fichier ecs.config.

Résolution

Créer une AMI

Trois options s'offrent à vous pour créer une AMI :

Installez Docker

Pour installer Docker en fonction de votre système d'exploitation et de votre architecture système, consultez les instructions d'installation du moteur Docker sur le site Web de Docker.

Installation du package ecs-int

1.    Exécutez la commande suivante pour télécharger le package Amazon ecs-int pour CentOS, SUSE Enterprise Server ou RHEL :

Remarque : Remplacez la région par la région AWS dans laquelle vous avez lancé l'instance.

Pour x86_64 CentOS 7 / 8, SUSE Enterprise Server 15 ou RHEL 7 :

$ curl -o amazon-ecs-init.rpm https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.x86_64.rpm

Pour aarch64 CentOS 7 / 8 ou RHEL 7 :

$ curl -o amazon-ecs-init.rpm https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.aarch64.rpm

2.    Exécutez l'une des commandes suivantes pour installer le package rpm que vous avez téléchargé pour votre instance :

Pour les packages rpm pour CentOS 7 / 8 et RHEL 7 :

$ sudo yum install -y ./amazon-ecs-init.rpm

Pour les packages rpm pour SUSE Enterprise Server 15 :

$ sudo zypper install -y --allow-unsigned-rpm ./amazon-ecs-init.rpm

(Facultatif) Installation de l'agent SSM pour ECS

Pour utiliser la fonctionnalité de débogage d'Amazon ECS Exec, vous devez installer l'agent SSM pour Amazon ECS.

1.    Exécutez la commande suivante pour télécharger et extraire les fichiers binaires de l'agent SSM :

$ mkdir -p ssm-binaries && cd ssm-binaries

2.    Exécutez l'une des commandes suivantes pour CentOS, SUSE Enterprise Server ou RHEL :

Remarque : Remplacez la région par la région dans laquelle vous avez lancé l'instance.

Pour x86_64 CentOS 7 / 8, SUSE Enterprise Server 15 ou RHEL 7 :

$ curl -o amazon-ssm-agent.tar.gz https://amazon-ssm-<region>.s3.<region>.amazonaws.com/latest/linux_amd64/amazon-ssm-agent-binaries.tar.gz

Pour aarch64 CentOS 7 / 8 ou RHEL 7 :

$ curl -o amazon-ssm-agent.tar.gz https://amazon-ssm-<region>.s3.<region>.amazonaws.com/latest/linux_arm64/amazon-ssm-agent-binaries.tar.gz

3.    Exécutez la commande suivante pour extraire les fichiers de l'agent :

$ tar -xzvf amazon-ssm-agent.tar.gz

4.    Obtenez la version de l'agent SSM, puis créez un répertoire sous /var/lib/ecs/deps/execute-command/bin/. Nommez le répertoire avec la version de l'agent SSM. Voici un exemple de commande permettant d'obtenir la version de l'agent SSM :

$ ./amazon-ssm-agent -version  

SSM Agent version: 3.2.286.0  

$ export SSM_VERSION=3.2.286.0  

$ sudo mkdir -p /var/lib/ecs/deps/execute-command/bin/$SSM_VERSION

5.    Exécutez les commandes suivantes pour copier les fichiers binaires de l'agent SSM dans le répertoire :

$ sudo cp amazon-ssm-agent /var/lib/ecs/deps/execute-command/bin/$SSM_VERSION/amazon-ssm-agent  

$ sudo cp ssm-agent-worker /var/lib/ecs/deps/execute-command/bin/$SSM_VERSION/ssm-agent-worker  

$ sudo cp ssm-session-worker /var/lib/ecs/deps/execute-command/bin/$SSM_VERSION/ssm-session-worker

6.    Exécutez la commande suivante pour copier les certificats TLS pour l'agent SSM :

$ sudo mkdir -p /var/lib/ecs/deps/execute-command/certs  

$ sudo cp /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /var/lib/ecs/deps/execute-command/certs/tls-ca-bundle.pem  

$ sudo chmod 400 /var/lib/ecs/deps/execute-command/certs/tls-ca-bundle.pem

Activez le service ECS et confirmez que l'agent de conteneur ECS est actif

1.    Pour activer le service ECS, exécutez la commande suivante :

$ sudo systemctl enable --now ecs

2.    Exécutez la commande suivante pour vérifier que le service ECS est activé et que l'agent de conteneur ECS est actif :

$ sudo systemctl status ecs

$ sudo docker ps

Les sorties ressemblent à ce qui suit :

ecs.service - Amazon Elastic Container Service - container agent
     Loaded: loaded (/lib/systemd/system/ecs.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-02-22 08:39:02 UTC; 11min ago
(...)
CONTAINER ID   IMAGE                            COMMAND    CREATED         STATUS                   PORTS     NAMES
108cfb8a10d2   amazon/amazon-ecs-agent:latest   "/agent"   9 minutes ago   Up 9 minutes (healthy)             ecs-agent

Nettoyez l'image

1.    Pour nettoyer l'image en vue d'une utilisation ultérieure, exécutez la commande suivante pour arrêter le package ecs-init et les processus Docker :

$ sudo systemctl stop ecs
$ sudo systemctl stop docker

2.    Supprimez tous les fichiers journaux de l'instance actuelle pour éviter de les conserver lors de l'enregistrement de l'image. Utilisez l'exemple de script de la section Meilleures pratiques de sécurité pour EC2 Image Builder afin de nettoyer les différents fichiers de l'instance.

3.    Pour nettoyer les données spécifiques à ECS, exécutez les commandes suivantes :

$ sudo rm -rf /var/log/ecs/*
$ sudo rm /var/lib/ecs/data/agent.db

Création d'une nouvelle image Amazon EC2

Exécutez la commande suivante pour utiliser l'image configurée à l'étape précédente afin de créer une nouvelle image :

$ aws ec2 create-image --description "My ECS Image" --instance-id i-012345678910 --name Custom-ECS-Image --reboot

La sortie ressemble au message suivant :

{
    "ImageId": "ami-01234567890101"
}

Lancer une instance

Pour lancer une instance, consultez la section Lancement d'une instance de conteneur Amazon ECS Linux.

Avec votre nouvelle AMI, exécutez la commande suivante pour vérifier que UserData contient la commande à écrire dans le fichier ecs.config :

Remarque : Remplacez your_cluster_name par le nom de votre cluster.

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an