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

최종 업데이트 날짜: 2022년 8월 8일

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 1 AMI에 적용됩니다. Amazon ECS에 최적화된 Amazon Linux 2 AMI에 적용되는 해결 방법에 대한 자세한 내용은 연결이 끊긴 Amazon ECS 에이전트의 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.

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

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

sudo service docker status

이 명령 출력은 다음과 유사합니다.

docker (pid 23013) is running...

Docker 서비스가 실행 중이 아니거나 서비스를 다시 시작해야 하는 경우 다음 명령을 실행합니다.

sudo service docker restart

참고: 서비스가 이미 실행 중인 경우 이 명령을 입력하지 마십시오. 먼저 컨테이너 인스턴스를 드레이닝 상태로 설정해야 합니다. 그런 다음 기존 작업이 다른 컨테이너 인스턴스에서 예약되도록 Docker 서비스를 다시 시작합니다.

명령 출력에 다음 행이 포함되어야 합니다.

Stopping docker: [  OK  ]
Starting docker: [  OK  ]

참고: restart 명령 이후에 Docker 서비스가 실행 중인지 확인하려면 sudo service docker status 명령을 실행합니다.

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

sudo start ecs

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

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

sudo status ecs

컨테이너 에이전트가 컨테이너 인스턴스에서 실행 중이 아니면, 다음 명령을 실행하여 에이전트를 시작합니다.

sudo start ecs

이 명령 출력은 다음과 유사합니다.

ecs start/running, process 23403

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

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

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

sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
sudo cat /var/log/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

추가 도움말

이 해결 방법에서 ECS 컨테이너 인스턴스와 관련된 문제를 확인할 수 없는 경우 Premium Support에 문의하여 도움을 받으세요. 먼저 Amazon ECS 로그 수집기를 사용하여 인스턴스 로그의 아카이브를 생성합니다. 그런 다음 지원 엔지니어가 문제를 해결하는 데 도움이 되도록 로그를 지원 티켓에 첨부합니다.