Amazon ECS에서 사용자 지정 AMI를 생성하고 사용하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2022년 4월 15일
Amazon Elastic Container Service(Amazon ECS) 클러스터에서 CentOS, SUSE Enterprise Server 또는 RHEL 기반 사용자 지정 Amazon Machine Image(AMI)를 설정하고 사용하고 싶습니다.
간략한 설명
Amazon ECS에서 사용할 사용자 지정 AMI를 생성하려면 다음을 수행합니다.
- AMI를 생성합니다.
- 운영 체제에 Docker를 설치합니다.
- ecs-init 패키지를 설치합니다.
- ECS 서비스를 활성화하고 ECS 컨테이너 에이전트가 활성 상태인지 확인합니다.
- 나중에 사용할 수 있도록 이미지를 정리합니다.
- 새 Amazon Elastic Compute Cloud(Amazon EC2) 이미지를 생성합니다.
- Amazon ECS Linux 컨테이너 인스턴스를 시작하고 인스턴스를 실행할 때 필요한 UserData를 추가하여 ecs.config 파일을 구성합니다.
해결 방법
AMI 생성
AMI 생성에는 세 가지 옵션이 있습니다.
- Amazon Linux ECS 최적화 AMI를 기반으로 사용자 지정 AMI를 생성하려면 Hashicorp Packer와 함께 ECS에 최적화된 AMI 빌드 레시피를 사용하여 이미지를 생성합니다.
- EC2 Image Builder 서비스를 사용하여 이미지의 유지 관리를 구축하고 관리할 수 있습니다.
- Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작한 다음 ECS에 필요한 구성 요소를 포함하도록 인스턴스를 구성합니다. ECS 요구 사항이 기본 제공되는 AMI와 ECS AMI의 기반이 되는 AMI를 생성하려면 사용자 지정 Amazon Machine Image(AMI)에서 EC2 인스턴스를 시작하려면 어떻게 해야 합니까?를 참조하세요. 인스턴스가 실행된 후 SSH 클라이언트를 사용하여 Linux 인스턴스에 연결 단원을 참조하세요.
Docker 설치
운영 체제 및 시스템 아키텍처에 맞게 Docker를 설치하려면 Docker 엔진 설치를 참조하세요.
ecs-int 패키지 설치
참고: 리전을 인스턴스를 시작한 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/8 및 RHEL 7용 rpm 패키지의 경우:
$ sudo yum install -y ./amazon-ecs-init.rpm
SUSE Enterprise Server 15용 rpm 패키지의 경우:
$ sudo zypper install -y --allow-unsigned-rpm ./amazon-ecs-init.rpm
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를 사용하여, 다음 명령을 실행해ecs.config 파일에 쓰는 명령이 UserData에 포함되어 있는지 확인합니다. 참고: your_cluster_name을 클러스터 이름으로 바꿉니다.
#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config