Ir para o conteúdo

Como faço para criar e usar AMIs personalizadas no Amazon ECS?

6 minuto de leitura
0

Quero configurar e usar o CentOS, SUSE Enterprise Server ou a imagem de máquina da Amazon (AMI) personalizada baseada em RHEL em um cluster do Amazon Elastic Container Service (Amazon ECS).

Breve descrição

Para criar uma AMI personalizada para uso com o Amazon ECS, faça o seguinte:

  1. Crie uma AMI.
  2. Instale o Docker em seu sistema operacional.
  3. Instale o pacote ecs-init.
  4. (Opcional) Instale o AWS Systems Manager Agent (SSM Agent) para ECS.
  5. Ative o serviço do ECS e confirme se o atendente de contêiner do ECS está ativo.
  6. Limpe a imagem para uso futuro.
  7. Crie uma nova imagem do Amazon Elastic Compute Cloud (Amazon EC2).
  8. Execute uma instância de contêiner do Amazon ECS Linux e adicione o UserData necessário ao executar a instância para configurar o arquivo ecs.config.

Resolução

Crie uma AMI

Há três opções para criar uma AMI:

Instale o Docker

Para instalar o Docker para seu sistema operacional e arquitetura do sistema, consulte as instruções de Instalação do Docker Engine no site do Docker.

Instale o pacote ecs-int

1.    Faça o download do pacote ecs-int da Amazon para CentOS, SUSE Enterprise Server, ou RHEL executando um dos seguintes comandos:

Observação: Substitua região pela região da AWS em que você iniciou a instância.

Para 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

Para 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.    Instale o pacote rpm que você baixou para a sua instância executando um dos seguintes comandos:

Para pacotes rpm para CentOS 7 / 8 e RHEL 7:

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

Para pacotes rpm para SUSE Enterprise Server 15:

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

(Opcional) Instale o SSM Agent para ECS

Para usar o Amazon ECS Exec para o atributo de depuração, você deve instalar o SSM Agent para Amazon ECS.

  1. Execute o comando a seguir para baixar e extrair os binários do SSM Agent:
$ mkdir -p ssm-binaries && cd ssm-binaries
  1. Execute um dos seguintes comandos para CentOS, SUSE Enterprise Server ou RHEL:

Observação: Substitua region pela região em que você iniciou a instância.

Para 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

Para 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
  1. Execute o comando a seguir para extrair os arquivos do atendente:
$ tar -xzvf amazon-ssm-agent.tar.gz
  1. Obtenha a versão do SSM Agent e crie um diretório em /var/lib/ecs/deps/execute-command/bin/. Nomeie o diretório com a versão do SSM Agent. Veja a seguir um exemplo de comando para obter a versão do SSM Agent:
$ ./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
  1. Execute os seguintes comandos para copiar os arquivos binários do SSM Agent para o diretório:
$ 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
  1. Execute o comando a seguir para copiar os certificados TLS para o SSM Agent:
$ 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

Ative o serviço do ECS e confirme se o atendente de contêiner do ECS está ativo

1.    Para habilitar o serviço do ECS, execute o seguinte comando:

$ sudo systemctl enable --now ecs
  1. Execute o comando a seguir para confirmar que o serviço do ECS está ativado e se o atendente de contêiner do ECS está ativo:
$ sudo systemctl status ecs

$ sudo docker ps

As saídas são semelhantes ao seguinte:

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

Limpe a imagem

1.    Para limpar a imagem para uso futuro, interrompa o pacote ecs-init e os processos do Docker executando os seguintes comandos:

$ sudo systemctl stop ecs
$ sudo systemctl stop docker

2.    Remova todos os arquivos de log da instância atual para evitar preservá-los ao salvar a imagem.. Use o script de exemplo nas práticas recomendas de segurança para EC2 Image Builder para limpar vários arquivos ad instância.

3.    Para limpar os dados específicos ECS, execute os seguintes comandos:

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

Crie uma nova imagem do Amazon EC2

Use sua imagem configurada da etapa anterior para criar uma nova imagem executando o seguinte comando:

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

A saída é semelhante ao seguinte:

{
    "ImageId": "ami-01234567890101"
}

Execute uma instância

Para executar uma instância, consulte Iniciar uma instância de contêiner do Linux do Amazon ECS.

Com sua nova AMI, execute o comando a seguir para confirmar se o UserData contém o comando para gravar no arquivo ecs.config:

**Observação:**Substitua your\ _cluster\ _name pelo nome do seu cluster.

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
AWS OFICIALAtualizada há 3 anos