Amazon Elastic Container Service(Amazon ECS) 작업이 Amazon Elastic Container Registry(Amazon ECR)에서 이미지를 가져오려고 하면 ResourceInitializationError 오류가 발생합니다.
간략한 설명
Amazon ECS 작업을 시작할 때 다음과 같은 ResourceInitializationError 오류 메시지 중 하나가 표시될 수 있습니다.
"Unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. Check your task network configuration. RequestError: send request failed caused by: Post "https://api.ecr.region-code.amazonaws.com/": dial tcp ip.xx.xx.xx.xx:443: i/o timeout"
-또는-
"unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post "https://api.ecr.region-code.amazonaws.com/": dial tcp ip.xx.xx.xx.xx:443: i/o timeout. Please check your task network configuration."
이러한 오류는 Amazon ECS 작업이 컨테이너 이미지를 가져오거나 Amazon ECR에서 인증 정보를 검색할 수 없을 때 발생합니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
작업 연결 테스트
AWSSupport-TroubleshootECSTaskFailedToStart 런북을 사용하여 작업 연결을 테스트하십시오. Amazon ECS 클러스터 리소스가 있는 곳과 같은 AWS 리전에서 런북을 실행해야 합니다. 또한 가장 최근에 실패한 작업 ID를 사용하십시오. 실패한 작업이 Amazon ECS 서비스의 일부인 경우, 서비스에서 가장 최근에 실패한 작업을 사용합니다. 실패한 작업은 자동화 중에 ECS:DescribeTasks에 표시되어야 합니다. 기본적으로 중지된 작업은 중지됨 상태가 된 후 1시간 동안 표시됩니다.
자동화 출력에 따라 다음 수동 문제 해결 단계 중 하나를 사용합니다.
서브넷에서 인터넷으로의 경로 확인
Amazon ECS 작업을 배포한 서브넷의 라우팅 테이블을 확인합니다. 작업에 인터넷으로의 기본 경로(0.0.0.0/0)가 있는지 확인하고 작업 보안 그룹이 포트 443에서 아웃바운드 트래픽을 허용하는지 확인합니다.
퍼블릭 서브넷
AWS Fargate 작업이 퍼블릭 서브넷에 있는 경우, 작업에 퍼블릭 IP 주소를 할당해야 합니다.
작업의 탄력적 네트워크 인터페이스와 프라이빗 IP 주소를 보려면 다음 describe-tasks AWS CLI 명령을 실행합니다.
aws ecs describe-tasks --cluster cluster-name --tasks task-arn
참고: cluster-name을 클러스터 이름으로 바꾸고 task-arn을 작업 ARN으로 바꾸십시오.
작업의 네트워크 인터페이스에 퍼블릭 IP 주소가 연결되어 있는지 확인하려면 다음 describe-network-interface 명령을 실행합니다.
aws ec2 describe-network-interfaces --network-interface-ids example-eni
참고: example-eni를 작업의 네트워크 인터페이스로 바꾸십시오.
작업과 연결된 네트워크 인터페이스에 퍼블릭 IPv4 주소를 자동으로 할당하도록 Amazon ECS를 구성합니다. 새 작업을 실행하거나 새 서비스를 생성할 때 퍼블릭 IP에 대해 켜짐을 선택합니다.
기존 작업이나 서비스에 퍼블릭 IP 주소를 자동으로 할당할 수는 없습니다. 대신 자동 퍼블릭 IP 주소 할당이 활성화된 상태로 서비스를 다시 생성하려면 다음 create-service 명령을 실행합니다.
aws ecs create-service --cluster cluster-name --service-name service-name --task-definition taskdef:revision --desired-count 1 --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[subnet-aaaaaa,subnet-bbbbbb],securityGroups=[sg-ccccccc],assignPublicIp=ENABLED}"
참고: cluster-name을 클러스터 이름으로, service-name을 서비스 이름으로, taskdef:revision을 작업 정의로 바꾸십시오. subnet-aaaaaa와 subnet-bbbbbb를 서브넷으로, sg-ccccccc를 보안 그룹으로 바꾸십시오.
클러스터용 Amazon Virtual Private Cloud(Amazon VPC) 연결에 DNS 호스트 이름과 DNS 확인이 활성화되어 있는지 확인하십시오.
프라이빗 서브넷
작업이 프라이빗 서브넷에 있는 경우 인터넷 연결 소스에 기반하여 다음 구성을 확인하십시오.
네트워크 ACL 및 보안 그룹 설정 확인
네트워크 액세스 제어 목록(네트워크 ACL)과 보안 그룹이 서브넷에서 포트 443으로의 아웃바운드 액세스를 허용하는지 확인합니다.
참고: Fargate 작업이 발신 트래픽을 허용하고 Amazon ECS 엔드포인트에 액세스하려면 포트 443에 대한 아웃바운드 액세스 권한이 있어야 합니다.
(PrivateLink 전용) Amazon VPC 엔드포인트 확인
PrivateLink를 사용하는 경우, 다음과 같은 필수 엔드포인트를 생성해야 합니다.
- Amazon ECR의 경우 com.amazonaws.region.ecr.dkr 및 com.amazonaws.region.ecr.api를 생성합니다.
- Amazon Simple Storage Service(Amazon S3) 게이트웨이의 경우 com.amazonaws.region.s3을 생성합니다.
- Amazon CloudWatch를 사용하여 애플리케이션 로그를 저장하는 경우 com.amazonaws.region.logs도 생성하십시오.
참고: 위 엔드포인트에서 region을 자신의 리전으로 바꾸십시오.
자세한 내용은 Amazon ECR VPC 엔드포인트 고려 사항을 참조하십시오.
VPC에 인터넷 게이트웨이가 없고 작업에서 awslogs 로그 드라이버를 사용하는 경우 CloudWatch Logs용 VPC 엔드포인트를 생성하십시오.
VPC 엔드포인트의 보안 그룹이 TCP 포트 443에서 Fargate 작업 보안 그룹 또는 VPC CIDR 범위의 트래픽을 허용하는지 확인하십시오.
IAM 역할 및 권한 확인
AWS Identity and Access Management(IAM) 작업 실행 역할에 AmazonECSTaskExecutionRolePolicy 또는 이와 동등한 권한이 있는지 확인하십시오.
역할 권한 및 작업 실행 역할에 대한 자세한 내용은 Amazon ECS 작업 실행 IAM 역할을 참조하십시오.
관련 정보
Amazon ECS 중지된 작업 연결 확인