본 기사는 AWS 지원 자동화 워크플로우 (Support Automation Workflow)의 "AWSSupport-TroubleshootECSContainerInstance" 런북을 사용하여 Amazon ECS 클러스터에 Container Instance가 등록되지 않는 문제를 진단하고 해결하는 방법에 대하여 설명합니다.
ECS 서비스는 컨테이너 애플리케이션을 쉽게 배포, 관리할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스로서, n개의 컨테이너로 구성된 Task 단위로 애플리케이션을 실행합니다.
ECS Task를 실행하기 위해서는 컴퓨팅 옵션으로 서버리스(AWS Fargate), 혹은 Aamazon EC2 Instance 유형을 선택할 수 있습니다. EC2 Instance 유형을 선택하면, EC2 인스턴스를 생성하고 ECS Cluster에 등록해야합니다. 이렇게 ECS Cluster에 등록된 EC2 Instance를 ECS Container Instance라고 부릅니다.
ECS Container Instance를 ECS Cluster에 등록하기 위해 인스턴스 시작 시 인스턴스 내부에서 ECS Agent가 자동으로 실행되어 ECS Cluster에 등록을 시도합니다. 이 때 ECS Agent Config File (/etc/ecs/ecs.config)내에 ECS Cluster에 대한 올바른 정보가 포함되어있어야합니다. 일반적으로 인스턴스의 UserData에서 이러한 ECS Agent Config 파일을 동적으로 구성하거나 다운로드하는 방안을 사용합니다. 이러한 요구 사항 및 권장 사항으로 미리 구성된 Amazon ECS Optimized AMI를 이용하셔서 ECS Container Instance를 실행시키는 것을 권고드립니다.
만약 ECS Container Instance가 ECS Cluster에 정상적으로 등록되지 않는다면 Task가 정상적으로 실행되지 않을 뿐 아니라 사용되지 않는 EC2 Instance로 인한 불필요한 비용이 발생할 수 있습니다. 따라서 UserData, VPC 네트워크, 보안그룹 및 적절한 IAM 권한 등이 설정되어있는지 면밀히 검토하여야합니다. 또한 AWS Support로 지원 케이스를 생성하여 도움을 받으실 수 있습니다.
이 문서에서는 AWS Support의 도움 없이 직접 빠르게 원인을 분석하고 문제 해결을 시도하는데 도움이 될 수 있는 AWS 지원 자동화 워크플로우 (Support Automation Workflow) 런북을 활용하는 방안을 안내합니다.
AWS 지원 자동화 워크플로우는 AWS Systems Manager 셀프 서비스 자동화 런북 모음입니다. 이러한 런북은 AWS Support Engineering 팀에서 고객 문제를 해결하며 배운 모범 사례를 바탕으로 작성되었습니다. 이를 통해 AWS 고객은 AWS 리소스의 일반적인 문제를 진단, 수정, 해결할 수 있습니다. 또한 네트워크 문제를 사전에 식별하고 로그 수집 및 분석의 다양한 작업을 수행할 수 있습니다. AWS 지원 자동화 워크플로우 런북은 AWS 모범 사례에 따라 수동 작업 및 관리 오버헤드, 인적 오류를 줄일 수 있습니다.
단, 해당 런북에 액세스 하려면 Enterprise 또는 Business Support Subscription이 필요합니다. 자세한 내용은 AWS Support 플랜 비교를 참조하십시오.
AWS 지원 자동화 워크플로우에서 제공되는 "AWSSupport-TroubleshootECSContainerInstance" 런북을 이용하면 Amazon ECS Cluster에 등록되지 못하는 ECS Container Instance의 문제를 해결하는 데 도움이 됩니다.
"AWSSupport-TroubleshootECSContainerInstance" 런북은 사용자를 대신하여 다음과 같은 작업을 수행합니다.
- ECS Container Instance의 UserData에 올바른 ECS Cluster 정보가 포함되어있는지 점검합니다.
- ECS Container Instance의 Instance Profile에 적절한 권한이 포함되어있는지 점검합니다.
- ECS Container Instance가 ECS Cluster에 연결하기 위한 적절한 Network 구성이 되어있는지 점검합니다.
만약 해당 런북을 통해 문제 해결이 되지 않을 경우, 인스턴스에 접속 후 ECS Agent 로그를 검토하여 원인을 분석하고 문제 해결을 시도할 수 있습니다.
문제 해결 예시
본 기사에서는 "AWSSupport-TroubleshootECSContainerInstance" 런북을 이용하여 ECS Container Instance가 ECS Cluster에 정상적으로 등록되지 않은 이슈에 대한 해결 예제를 제공합니다.
위와 같이 Container Instance가 정상적으로 ECS Cluster에 등록되지 못하는 상황이 발생하였다고 가정하겠습니다.
-
우선, 문제가 발생한 ECS Cluster Name과 Container Instance ID를 확인합니다. Container Instance가 ECS Clsuter에 정상적으로 등록되지 못하였기 때문에 ECS Console에서는 이 인스턴스의 ID를 확인할 수 없습니다. 대신 EC2 Console에서 ID를 확인할 수 있습니다.
-
AWS Systems Manager 콘솔로 이동하여 왼쪽 네비게이션에서 자동화(Automation)를 선택합니다.
-
오른쪽의 자동화 실행(Execute automation) 버튼을 클릭합니다.
-
중앙의 자동화 런북에서 "TroubleshootECSContainerInstance"을 검색하고 선택한 뒤 하단에서 다음(Next)을 클릭합니다.
-
기본적으로 단순 실행(Simple execution)으로 선택됩니다. 입력 파라미터(Input Parameters) 섹션에서 필요한 정보를 입력합니다. 예는 다음과 같습니다.
- AutomationAssumeRole(선택): System Manager에서 수임할 IAM Role을 지정합니다. 런북에서는 위에 설명한 작업들을 사용자 대신 수행하기 때문에 관련 권한이 존재해야 하며, 지정하지 않을 시 수행한 사용자의 권한으로 실행합니다.
- ClusterName (필수): 문제가 발생한 ECS 클러스터명을 입력합니다.
- InstanceId (필수): 문제가 발생한 Container Instance ID를 입력합니다.
필수 실행 권한은 "AWSSupport-TroubleshootECSContainerInstance" 런북 공식 문서에서 확인이 가능합니다.
-
하단의 실행(Execute)를 클릭합니다.
-
런북이 실행되면, 위에 설명한 작업이 자동으로 진행됩니다.
-
런북이 성공적으로 실행 완료되면 Overall status는 Success 상태가 되고, Outputs 섹션을 통해 진단 내용을 확인하여 조치하실 수 있습니다.
위 예시에서 Outputs은 다음의 메시지를 반환하고있습니다.
It seems like the container instance doesn't have communication with ECS service endpoint.
Container instances need access to communicate with the Amazon ECS service endpoint.
This can be through an interface VPC endpoint or through your container instances having public IP addresses.
For more information about interface VPC endpoints, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/vpc-endpoints.html
If you do not have an interface VPC endpoint configured and your container instances do not have public IP addresses, then they must use network address translation (NAT) to provide this access.
For more information, see NAT gateways in the Amazon VPC User Guide (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) and HTTP proxy configuration in this guide https://docs.aws.amazon.com/AmazonECS/latest/developerguide/http_proxy_config.html.
For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-public-private-vpc.html
해당 내용은 Container Instance가 ECS Cluster에 등록되기 위해서는 ECS Service Endpoint와 정상적으로 통신하여야하는데, ECS Service Endpoint에 접근이 되지 않기 때문에 등록에 실패하였다는 내용입니다. 이슈 해결을 위해 다음의 방안들을 안내하고 있습니다.
- Container Instance가 Public Subnet에 생성된 경우 Public IP를 가지는지 그리고 Internet Gateway를 통해 ECS Service Endpoint와 통신이 가능하도록 Routing Table이 구성되었는지 확인
- Container Instance가 Private Subnet에 생성된 경우 NAT Gateway를 통해 ECS Service Endpoint와 통신이 가능하도록 Routing Table이 구성되었는지 확인
- Internet Gateway가 구성되지 않은 VPC 환경에서는 VPC Endpoint를 통해 ECS Service Endpoint와 통신이 가능하도록 구성 되었는지 확인
또한, 추가적으로 다음의 사항을 고려할 필요가 있습니다.
- Container Instance에 연결된 Security Group의 Outbound Rule에서 ECS Service Endpoint로의 통신을 허용하고 있는지 확인
- VPC Endpoint를 사용할 경우 VPC Endpoint에 연결된 Security Group의 Inbound Rule에서 Container Instance로부터의 통신을 허용하고 있는지 확인
- VPC Endpoint를 사용할 경우 Private DNS Enabled 설정이 정상적으로 활성화 되어있는지 확인
이렇게 Outputs에 안내된 메시지에 따라 관련 설정을 점검하고 필요한 조치를 수행하여 Container Instance가 ECS Cluster에 정상적으로 등록하실 수 있습니다.
만약, 지원 자동화 워크플로우 런북을 진행하였음에도 원인 분석이 어렵거나 조치 방법을 찾을 수 없어 이슈가 해결되지 않을 경우, AWS Support 에 문의하여 계속 문제 해결을 시도할 수 있습니다.
이때, 앞서 실행하신 지원 자동화 워크플로우 런북 실행 ID가 포함된 케이스를 열어 주시면 빠른 지원에 도움이 됩니다.
참고:
[1] AWS 지원 자동화 워크플로우(AWS Support Automation Workflow - AWS SAW)
https://aws.amazon.com/ko/premiumsupport/technology/saw/
[2] AWSSupport-TroubleshootECSContainerInstance
https://docs.aws.amazon.com/ko_kr/systems-manager-automation-runbooks/latest/userguide/automation-aws-troubleshoot-ecs-container-instance.html