kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

AWS

AWS ECS 컨테이너 인스턴스 연결 해제

까마기 2020. 10. 26. 13:34
728x90
반응형

Amazon Linux 2 AMI가 있는 Amazon ECS 컨테이너 인스턴스가 연결 해제된 이유?

Amazon ECS 컨테이너 에이전트는 한 시간에 여러 번 연결 및 재연결될 수 있습니다. 이러한 변경 이벤트는 정상적인 상황이며, 걱정하지 않아도 됩니다.

하지만 컨테이너 에이전트가 연결이 해제된 상태로 남아 있으면 컨테이너 인스턴스는 ECS 클러스터의 일부로 작동할 수 없습니다. agentConnected에서 false를 반환하면 에이전트가 연결 해제된 것입니다. 이 문제의 원인은 다음과 같을 수 있습니다.

  • 네트워킹 문제로 인해 인스턴스와 Amazon ECS 간에 통신이 차단됨

  • 컨테이너 에이전트에 Amazon ECS 엔드포인트와 통신하는 데 필요한 AWS Identity and Access Management(IAM) 권한이 없음

  • 컨테이너 인스턴스 내 호스트 또는 도커 서비스에 문제가 있음

연결 해제 원인을 식별하려면 다음 단계를 수행합니다.

참고: 다음 해결 방법은 Amazon ECS에 최적화된 Amazon Linux 2 AMI에 적용됩니다. Amazon ECS에 최적화된 Amazon Linux 1 AMI에 적용되는 해결 방법은 Amazon ECS 컨테이너 인스턴스가 Amazon Linux 1 AMI와 연결 해제된 이유는 무엇입니까?를 참조하십시오.

해결 방법

도커 서비스가 컨테이너 인스턴스에서 실행 중인지 확인

1.    도커 서비스가 해당되는 컨테이너 인스턴스에서 실행 중인지 확인하려면 다음 명령을 실행합니다.

sudo systemctl status docker

다음과 유사한 명령 출력이 표시됩니다.

docker.service - Docker Application Container Engine

Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)

Active: active (running) since Fri 2019-06-28 03:23:52 UTC; 1 day 12h ago

Docs: https://docs.docker.com

Process: 5519 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)

Process: 5509 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)

Main PID: 5531 (dockerd)

Tasks: 60

Memory: 55.4M

CGroup: /system.slice/docker.service

├─5531 /usr/bin/dockerd --default-ulimit nofile=1024:4096

├─5570 docker-containerd --config /var/run/docker/containerd/containerd.toml

├─5782 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/...

├─6006 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/...

└─6284 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/...

도커 서비스가 비활성 상태인 경우 다음 명령을 실행하여 도커 서비스를 다시 시작합니다.

sudo systemctl restart docker

참고: 명령은 출력을 반환해서는 안 되지만, sudo systemctl status docker 명령을 실행하여 도커 서비스가 시작되었는지 확인할 수 있습니다.

2.    컨테이너 에이전트를 시작하려면 다음 명령을 실행합니다.

sudo systemctl start ecs

컨테이너 에이전트가 컨테이너 인스턴스에서 실행 중인지 확인

컨테이너 에이전트가 해당되는 컨테이너 인스턴스에서 실행 중인지 확인하려면 다음 명령을 실행합니다.

sudo systemctl status ecs

다음과 유사한 명령 출력이 표시됩니다.

ecs.service - Amazon Elastic Container Service - container agent

Loaded: loaded (/usr/lib/systemd/system/ecs.service; enabled; vendor preset: disabled)

Active: active (running) since Sat 2019-06-29 15:45:57 UTC; 4min 5s ago

Docs: https://aws.amazon.com/documentation/ecs/

Process: 18896 ExecStopPost=/usr/libexec/amazon-ecs-init post-stop (code=exited, status=0/SUCCESS)

Process: 18818 ExecStop=/usr/libexec/amazon-ecs-init stop (code=exited, status=0/SUCCESS)

Process: 19422 ExecStartPre=/usr/libexec/amazon-ecs-init pre-start (code=exited, status=0/SUCCESS)

Main PID: 19455 (amazon-ecs-init)

Tasks: 7

Memory: 2.7M

CGroup: /system.slice/ecs.service

└─19455 /usr/libexec/amazon-ecs-init start

명령 출력에서 서비스가 활성 상태로 표시되지 않으면 다음 명령을 실행하여 서비스를 다시 시작합니다.

sudo systemctl restart ecs

참고: 이 명령은 출력을 반환해서는 안 되지만, sudo systemctl status ecs 명령을 실행하여 컨테이너 에이전트가 시작되었는지 확인합니다.

컨테이너 에이전트 및 도커에 대한 로그 파일 검토

컨테이너 인스턴스가 여전히 연결 해제된 경우 컨테이너 에이전트 및 도커에 대한 컨테이너 호스트에서 로그 파일을 검토합니다.

컨테이너 에이전트 및 도커에 대한 로그 파일을 출력하려면 다음 명령을 실행합니다.

sudo journalctl -u ecs

sudo journalctl -u docker

참고: 컨테이너 인스턴스에서 로그 정보를 수집하려면 Amazon ECS 로그 수집기를 실행합니다.

IAM 인스턴스 프로파일에 필요한 권한이 있는지 확인

컨테이너 에이전트가 여전히 연결 해제된 경우 컨테이너 인스턴스에 연결된 IAM 인스턴스 프로파일에 필요한 IAM 권한이 있는지 확인합니다.

1.    SSH를 사용하여 인스턴스에 연결합니다.

2.    인스턴스에 연결된 인스턴스 프로파일에서 인스턴스 메타데이터를 보려면 다음 명령을 실행합니다.

curl http://169.254.169.254/latest/meta-data/iam/info

다음과 유사한 명령 출력이 표시됩니다.

{

"Code" : "Success",

"LastUpdated" : "2019-06-29T15:47:03Z",

"InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole",

"InstanceProfileId" : "AIPAJ5WF3LZVY7PLUHV72"

}

3.    IAM 역할이 컨테이너 인스턴스에 대한 올바른 권한을 포함하는지 확인합니다.

4.    컨테이너 에이전트에서 특정 자격 증명 오류를 확인하려면 다음 명령을 실행하여 ECS 로그 목록에서 컨테이너 에이전트 로그를 확인합니다.

cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**

참고: 컨테이너 에이전트 로그는 매시간 순환되며, 현재 날짜 및 시간을 반영하도록 자동으로 접미사가 변경됩니다. 문제가 발생한 시점에 대한 날짜 범위 및 로그 ID를 포함하도록 명령을 업데이트합니다.

컨테이너 에이전트에 필요한 자격 증명이 없으면 로그에 다음과 유사한 오류가 표시됩니다.

2019-06-29T16:10:09Z [ERROR] Unable to register as a container instance with ECS: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster

status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f

2019-06-29T16:10:09Z [ERROR] Error re-registering: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster

status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f

 

반응형

'AWS' 카테고리의 다른 글

aws elasticache 설치 후 redis cli 설치 및 key get하기 (링크만)  (0) 2020.10.26
AWS 스토리지 사용량 별 요금  (0) 2020.10.26
AWS ECS  (0) 2020.10.26
AWS SES(Simple Mail Service)  (0) 2020.10.26
AWS SSL 인증서 갱신  (0) 2020.08.26