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

최종 업데이트 날짜: 2020년 10월 16일

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 컨테이너 인스턴스가 Amazon Linux 2 AMI와 연결 해제된 이유는 무엇입니까?를 참조하십시오.

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

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

sudo service docker status

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

docker (pid 23013) is running...

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

sudo service docker restart

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

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

참고: restart 명령 이후에 도커 서비스가 실행 중인지 확인하려면 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