Amazon ECS 컨테이너 인스턴스가 Amazon Linux 2 AMI와 연결 해제된 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 9월 30일

Amazon ECS(Amazon Elastic Container Service)의 컨테이너 인스턴스 연결이 해제되었습니다.

간략한 설명

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 명령을 실행하여 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

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?