Amazon ECS 또는 Amazon EC2 인스턴스를 클러스터에 조인할 수 없는 이유는 무엇입니까?

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

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 Amazon Elastic Container Service(Amazon ECS) 클러스터에 등록할 수 없습니다.

간략한 설명

다음 이유 중 하나 이상으로 인해 Amazon EC2 인스턴스를 ECS 클러스터에 등록하거나 ECS 클러스터에 조인할 수 없습니다.

  • ECS 엔드포인트가 인스턴스의 DNS 호스트 이름에 퍼블릭으로 액세스할 수 없습니다.
  • 퍼블릭 서브넷 구성이 올바르지 않습니다.
  • 프라이빗 서브넷 구성이 올바르지 않습니다.
  • VPC 엔드포인트가 잘못 구성되었습니다.
  • 보안 그룹에서 네트워크 트래픽을 허용하지 않습니다.
  • EC2 인스턴스에 필수 AWS Identity and Access Management(IAM) 권한이 없습니다. 또는 ecs:RegisterContainerInstance API 호출이 거부되었습니다.
  • ECS 컨테이너의 인스턴스 사용자 데이터가 제대로 구성되지 않았습니다.
  • ECS 에이전트가 인스턴스에서 중지되었거나 실행되고 있지 않습니다.
  • Auto Scaling 그룹의 시작 구성이 올바르지 않습니다(인스턴스가 Auto Scaling 그룹의 일부인 경우).
  • 인스턴스에 사용된 Amazon Machine Image(AMI)가 사전 요구 사항을 충족하지 않습니다.

해결 방법

중요: AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager 런북을 사용하여 이전 섹션에 나열된 일반적인 문제를 해결합니다. 런북의 출력에서 권장 사항을 제공하지 않는 경우 다음 섹션에 설명된 수동 문제 해결 방법을 사용합니다.

Systems Manager Automation 런북 사용

AWSSupport-TroubleshootECSContainerInstance 런북을 통해 ECS 클러스터에 등록하지 못한 EC2 인스턴스의 문제를 해결할 수 있습니다. 이 자동화에서는 다음을 검토합니다.

  • 인스턴스의 사용자 데이터에 올바른 클러스터 정보가 포함되어 있습니까?
  • 인스턴스 프로파일에 필수 권한이 포함되어 있습니까?
  • 네트워크 구성 문제가 있습니까?

중요: ECS 클러스터 및 EC2 인스턴스가 있는 동일한 AWS 리전에서 AWSSupport-TroubleshootECSContainerInstance 런북을 사용합니다.

  1. AWS Systems Manager 콘솔을 엽니다.
  2. 탐색 창의 변경 관리(Change Management)에서 자동화(Automation)를 선택합니다.
  3. 자동화 실행(Execute automation)을 선택합니다.
  4. Amazon 소유(Owned by Amazon) 탭을 선택합니다.
  5. 자동화 문서(Automation document)에서 TroubleshootECSContainerInstance를 검색합니다.
  6. AWSSupport-TroubleshootECSContainerInstance 카드를 선택합니다.
    참고: 하이퍼링크로 연결된 자동화 이름이 아닌 라디오 버튼을 선택해야 합니다.
  7. 다음(Next)을 선택합니다.
  8. 실행 자동화 문서(Execution automation document)에서 단순 실행(Simple execution)이 선택되었는지 확인합니다.
  9. 입력 파라미터(Input parameters) 섹션에서 AutomationAssumeRole에 대해 Systems Manager Automation이 작업을 수행할 수 있도록 허용하는 역할의 Amazon 리소스 이름(ARN)을 입력합니다.
    참고: IAM 역할을 지정하지 않으면 Systems Manager Automation은 런북을 실행하는 IAM 사용자 또는 역할의 권한을 사용합니다. Systems Manager Automation에 대한 역할 수임을 만드는 방법에 대한 자세한 내용은 태스크 1: 자동화를 위한 서비스 역할 생성을 참조하세요.
    중요: AutomationAssumeRole 또는 IAM 사용자/역할에 ec2:DescribeIamInstanceProfileAssociations, ec2:DescribeInstanceAttribute, ec2:DescribeInstances, ec2:DescribeNetworkAcls, ec2:DescribeRouteTables, ec2:DescribeSecurityGroups, ec2:DescribeSubnets, ec2:DescribeVpcs, ec2:DescribeVpcEndpoints, iam:GetInstanceProfile, iam:GetRole, iam:SimulateCustomPolicyiam:SimulatePrincipalPolicy 작업에 대한 권한이 있는지 확인합니다.
  10. ClusterName에 EC2 인스턴스가 등록하지 못한 클러스터 이름을 입력합니다.
  11. InstanceID에 등록하지 못한 EC2 인스턴스 ID를 입력합니다.
  12. 실행(Execute)을 선택합니다.

런북의 출력에는 EC2 인스턴스가 클러스터에 등록되지 않은 문제를 해결하기 위한 문제 해결 단계 및 권장 사항이 나와 있습니다.

Amazon Linux 2 인스턴스에서 Amazon ECS 에이전트의 상태를 확인합니다.

다음 명령을 실행하여 인스턴스에서 ECS 에이전트가 실행 중인지 확인합니다.

sudo status ecs

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

sudo start ecs

명령 출력이 다음과 비슷해야 합니다.

ecs start/running, process 23403

시작 구성 확인

인스턴스가 Auto Scaling 그룹의 일부로 시작된 경우 Auto Scaling 그룹의 시작 구성이 올바른지 확인합니다. 자세한 내용은 새 AMI로 Amazon ECS 컨테이너 인스턴스 클러스터 교체5단계를 참조하세요.

인스턴스의 AMI 확인

EC2 인스턴스에 사용된 AMI가 복사된 AMI 또는 사용자 지정 AMI인 경우 인스턴스에 다음 구성 요소가 있는지 확인합니다.

Amazon ECS 최적화 AMI는 이러한 요구 사항에 따라 사전 구성되어 있습니다. 따라서 애플리케이션에 해당 AMI에서 아직 사용할 수 없는 특정 운영 체제 또는 Docker 버전이 필요한 경우가 아니라면 이 AMI를 컨테이너 인스턴스에 사용하는 것이 좋습니다.

로그 확인

그래도 문제가 계속되면 ECS 로그 수집기를 사용하여 로그를 수집한 다음, 로그를 검토하여 원인을 찾습니다. 컨테이너 호스트의 로그 파일에서 컨테이너 에이전트와 Docker를 확인할 수도 있습니다.

컨테이너 에이전트 및 Docker에 대한 로그 파일을 보려면 다음 명령을 실행합니다.

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

일반 오류

Error: Launching a new EC2 instance.(오류: 새 EC2 인스턴스 시작) Status Reason: This account is currently blocked and not recognized as a valid account.(상태 설명: 이 계정은 현재 차단되어 유효한 계정으로 인식되지 않습니다.) Please contact aws-verification@amazon.com if you have questions.(궁금한 점이 있으면 aws-verification@amazon.com으로 문의하세요.) Launching EC2 instance failed.(EC2 인스턴스를 시작하지 못했습니다.)

상태 설명에 나와 있는 대로 aws-verification@amazon.com에 연락하여 계정 차단을 해제해야 한다고 요청합니다.

Error: re-registering: ClientException: Container instance 12345678910xxxxxxxxxxxx is inactive.\n\tstatus code: 400, request id: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go

EC2 인스턴스가 현재 비활성 상태이므로 ECS 에이전트가 EC2 컨테이너 인스턴스를 ECS 클러스터에 등록할 수 없는 경우 이 오류가 발생합니다. 이 오류는 인스턴스에서 실행 중인 애플리케이션과 관련이 있습니다. 오류의 원인을 파악하려면 애플리케이션을 확인하세요. 오류가 계속되면 ECS 에이전트 로그를 확인하세요.

Error: Few instances are able to join the cluster but with the same configurations, other instance are not able to join the cluster.(오류: 몇 개의 인스턴스가 클러스터에 조인할 수 있지만, 동일한 구성의 다른 인스턴스는 클러스터에 조인할 수 없습니다.)

이 오류는 특정 API 호출에 대한 속도 제한이 초과될 때 발생하는 ThrottlingException이 원인일 수 있습니다. 이 오류를 해결하려면 계정 수준 속도 제한을 늘리십시오. RegisterTargets 및 RegisterContainerInstance와 같은 API를 확인해야 합니다.

Error: After changing the instance type, new instances are unable to join the cluster.(오류: 인스턴스 유형을 변경한 후 새 인스턴스는 클러스터에 조인할 수 없습니다.)

이 오류는 ECS 에이전트가 보류 중 상태로 중단되어 인스턴스 유형을 변경할 수 없는 경우에 발생합니다. 다른 EC2 인스턴스와 달리 ECS 인스턴스는 중지하고 인스턴스 유형을 변경한 후 다시 시작할 수 없습니다. ECS에서 인스턴스 유형을 변경하려면 컨테이너 인스턴스를 종료한 다음, 원하는 클러스터에 대해 최신 Amazon ECS 최적화 Amazon Linux 2 AMI를 사용하여 원하는 인스턴스 크기의 새 컨테이너 인스턴스를 시작해야 합니다. 새 시작 구성을 생성한 다음, Auto Scaling 그룹에서 이 시작 구성을 업데이트할 수도 있습니다.

Error: Unable to register as a container instance with ECS(오류: ECS를 사용하여 컨테이너 인스턴스로 등록할 수 없음): AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster . status code: 400, request id: 0a123456-7899-10101-a987-6543210deff

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: 0a123456-7899-10101-a987-123456pqrs

이러한 오류는 IAM 권한이 없기 때문에 발생합니다. 이러한 오류를 해결하려면 Amazon ECS 컨테이너 인스턴스 IAM 역할 확인 지침을 검토하십시오.

또한 AWSSupport-TroubleshootECSContainerInstance 런북을 실행하여 컨테이너 인스턴스 역할에서 누락된 권한을 확인합니다.