Amazon ECS에서 사용자 지정 AMI를 생성하고 사용하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Elastic Container Service(Amazon ECS) 클러스터에서 CentOS, SUSE Enterprise Server 또는 RHEL 기반 사용자 지정 Amazon Machine Image(AMI)를 설정하고 사용하고 싶습니다.

간략한 설명

Amazon ECS와 함께 사용할 사용자 지정 AMI를 생성하려면 다음과 같이 하세요.

  1. AMI를 생성합니다.
  2. 운영 체제에 맞는 Docker를 설치합니다.
  3. ecs-init 패키지를 설치합니다.
  4. (선택 사항) ECS용 AWS Systems Manager Agent(SSM Agent)를 설치합니다.
  5. ECS 서비스를 켠 다음, ECS 컨테이너 에이전트가 활성 상태인지 확인합니다.
  6. 나중에 사용할 수 있도록 이미지를 정리합니다.
  7. 새로운 Amazon Elastic Compute Cloud(Amazon EC2) 이미지를 생성합니다.
  8. Amazon ECS Linux 컨테이너 인스턴스를 시작한 다음, 인스턴스를 실행할 때 필요한 UserData를 추가하여 ecs.config 파일을 구성합니다.

해결 방법

AMI 생성

AMI를 생성하는 세 가지 옵션이 있습니다.

Docker 설치

운영 체제 및 시스템 아키텍처에 맞는 Docker를 설치하려면 Docker 웹사이트에서 Docker Engine 설치 지침을 참조하세요.

ecs-int 패키지 설치

1.    다음 명령을 실행하여 CentOS, SUSE Enterprise Server 또는 RHEL용 Amazon ecs-int 패키지를 다운로드합니다.

참고: region은 인스턴스를 시작한 AWS 리전으로 바꾸세요.

x86_64 CentOS 7 / 8, SUSE Enterprise Server 15 또는 RHEL 7의 경우:

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

aarch64 CentOS 7 / 8 또는 RHEL 7의 경우:

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

2.    다음 명령 중 하나를 실행하여 인스턴스용으로 다운로드한 rpm 패키지를 설치합니다.

CentOS 7 / 8RHEL 7rpm 패키지의 경우:

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

SUSE Enterprise Server 15rpm 패키지의 경우:

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

(선택 사항) ECS용 SSM Agent 설치

디버깅을 위한 Amazon ECS Exec 기능을 사용하려면 Amazon ECS용 SSM Agent를 설치해야 합니다.

1.    다음 명령을 실행하여 SSM Agent 바이너리를 다운로드하고 추출합니다.

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

2.    CentOS, SUSE Enterprise Server 또는 RHEL의 경우 다음 명령 중 하나를 실행합니다.

참고: region은 인스턴스를 시작한 리전으로 바꾸세요.

x86_64 CentOS 7 / 8, SUSE Enterprise Server 15 또는 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

aarch64 CentOS 7 / 8 또는 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.    다음 명령을 실행하여 에이전트 파일을 추출합니다.

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

4.    SSM Agent 버전을 가져온 다음 **/var/lib/ecs/deps/execute-command/bin/**에 디렉터리를 생성합니다. SSM Agent 버전으로 디렉터리 이름을 지정합니다. 다음은 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

5.    다음 명령을 실행하여 SSM Agent 바이너리 파일을 디렉터리에 복사합니다.

$ 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.    다음 명령을 실행하여 SSM Agent의 TLS 인증서를 복사합니다.

$ 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

ECS 서비스를 켜고 ECS 컨테이너 에이전트가 활성 상태인지 확인

1.    ECS 서비스를 켜려면 다음 명령을 실행합니다.

$ sudo systemctl enable --now ecs

2.    다음 명령을 실행하여 ECS 서비스가 켜져 있고 ECS 컨테이너 에이전트가 활성화되었는지 확인합니다.

$ sudo systemctl status ecs

$ sudo docker ps

출력은 다음과 비슷합니다.

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

이미지 정리

1.    나중에 사용할 수 있도록 이미지를 정리하려면 다음 명령을 실행하여 ecs-init 패키지 및 Docker 프로세스를 중지합니다.

$ sudo systemctl stop ecs
$ sudo systemctl stop docker

2.    이미지를 저장할 때 로그 파일이 보존되지 않도록 현재 인스턴스에서 모든 로그 파일을 제거하세요. EC2 Image Builder에 대한 보안 모범 사례의 예시 스크립트를 사용하여 인스턴스에서 다양한 파일을 정리합니다.

3.    ECS 관련 데이터를 정리하려면 다음 명령을 실행합니다.

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

새로운 Amazon EC2 이미지 생성

다음 명령을 실행하여 이전 단계에서 구성한 이미지를 사용하여 새 이미지를 만듭니다.

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

출력은 다음과 비슷합니다.

{
    "ImageId": "ami-01234567890101"
}

인스턴스 시작

인스턴스를 시작하려면 Amazon ECS Linux 컨테이너 인스턴스 시작을 참조하세요.

새로운 AMI를 사용하여 다음 명령을 실행하여 UserDataecs.config 파일에 쓰는 명령을 포함하도록 합니다.

참고: your_cluster_name은 클러스터의 이름으로 바꾸세요.

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
AWS 공식
AWS 공식업데이트됨 일 년 전