AWS Fargate에서 Amazon Elastic Container Service(Amazon ECS) 태스크를 시작할 수 있도록 "cannotpullcontainererror" 오류를 해결하고 싶습니다.
간략한 설명
"cannotpullcontainererror" 오류로 인해 태스크가 시작되지 않을 수 있습니다. Fargate에서 Amazon ECS 태스크를 시작하려면 Amazon Virtual Private Cloud(VPC) 네트워킹 구성에서 Amazon ECS 인프라가 이미지를 저장한 리포지토리에 액세스할 수 있도록 허용해야 합니다. 네트워킹이 올바르지 않으면 Fargate에서 Amazon ECS가 이미지를 가져올 수 없고 컨테이너도 시작되지 않습니다.
해결 방법
VPC 네트워킹 구성에서 Amazon ECS 인프라가 이미지 리포지토리에 연결하도록 허용하는지 확인
태스크가 생성된 서브넷과 연결된 라우팅 테이블에서 Amazon ECS 인프라가 리포지토리 엔드포인트에 도달할 수 있도록 허용해야 합니다. 엔드포인트는 인터넷 게이트웨이, NAT 게이트웨이 또는 VPC 엔드포인트를 통해 도달할 수 있습니다.
AWS PrivateLink를 사용하지 않을 경우, 다음 단계를 완료합니다.
- Amazon VPC 콘솔을 엽니다.
- 탐색 창에서 [서브넷]을 선택합니다.
- ECS Fargate 작업이 사용하는 서브넷을 선택합니다.
- Route Table(라우팅 테이블) 탭을 선택합니다.
- Destination(대상) 열에서 라우팅 테이블의 기본 라우팅(0.0.0.0/0)이 공개 인터넷 액세스를 허용하는지 확인합니다. NAT 게이트웨이 또는 인터넷 게이트웨이를 통해 공개 인터넷에 액세스할 수 있습니다.
중요: NAT 게이트웨이 또는 인터넷 게이트웨이는 기본 라우팅의 대상입니다. 예시 라우팅 테이블은 예시 라우팅 옵션을 참조하세요. NAT 게이트웨이 또는 인터넷 게이트웨이를 사용하지 않는 경우 사용자 지정 구성에서 공개 인터넷 액세스를 허용해야 합니다.
인터넷 게이트웨이(퍼블릭 서브넷)를 사용하는 경우 태스크에 퍼블릭 IP가 할당되었는지 확인합니다. 이렇게 하려면 작업 또는 서비스를 생성할 때 [VPC 및 보안 그룹] 섹션에서 [퍼블릭 IP 자동 할당]을 ENABLED로 설정하고 ECS 작업을 시작하세요.
PrivateLink를 사용하는 경우 VPC 엔드포인트의 보안 그룹에서 Fargate 인프라가 이를 사용하도록 허용하는지 확인합니다.
참고: 1.3.0 이하 버전을 사용하여 Fargate에서 호스팅 되는 Amazon ECS 태스크에는 com.amazonaws.region.ecr.dkr Amazon Elastic Container Registry(Amazon ECR) VPC 엔드포인트와 Amazon Simple Storage Service(S3) 게이트웨이 엔드포인트가 필요합니다. 버전 1.4.0 이상을 사용하여 Fargate에서 호스팅되는 Amazon ECS 태스크에는 com.amazonaws.region.ecr.dkr 및 com.amazonaws.region.ecr.api Amazon ECR VPC 엔드포인트와 Amazon S3 게이트웨이 엔드포인트가 모두 필요합니다.
- Amazon VPC 콘솔을 엽니다.
- 탐색 창에서 [엔드포인트]를 선택합니다.
- 엔드포인트 목록에서 엔드포인트를 선택한 다음, Subnet(서브넷) 탭을 선택합니다. Amazon ECR의 VPC 엔드포인트인 com.amazonaws.region.ecr.dkr과 com.amazonaws.region.ecr.api는 서브넷 목록에 표시되며 Fargate 서브넷과 연결됩니다. 또한 서브넷 목록에 Amazon S3 게이트웨이가 표시됩니다.
참고: 서브넷이 목록에 없으면 Manage Subnets(서브넷 관리)를 선택합니다. 다음으로 Availability Zone(가용 영역)을 기준으로 서브넷을 선택합니다. 그런 다음 Modify Subnets(서브넷 수정)를 선택합니다.
- Policy(정책) 탭을 선택한 다음 정책 요구 사항을 올바르게 준수하는지 확인합니다.
- com.amazonaws.region.ecr.api와 com.amazonaws.region.ecr.dkr VPC 엔드포인트에 연결된 보안 그룹에서 Fargate의 Amazon ECS 작업에서 시작된 연결을 포트 443에서 수신하도록 허용하는지 확인하려면 엔드포인트 목록에서 해당 엔드포인트를 선택하세요.
- [보안 그룹] 탭을 선택합니다.
- [그룹 ID]에서 보안 그룹 ID를 선택합니다.
- [인바운드 규칙] 탭을 선택한 다음, Fargate의 ECS 작업에서 443 연결을 허용하는 규칙이 보이는지 확인합니다.
VPC DHCP 옵션 세트 확인
- Amazon VPC 콘솔을 엽니다.
- 탐색 창에서 [내 VPC]를 선택합니다.
- Fargate 작업이 포함된 VPC를 선택합니다.
- [세부 정보] 탭에서 DHCP 옵션 세트의 설정을 메모합니다.
- 탐색 창에서 [DHCP 옵션 세트]를 선택합니다.
- 4단계에서 메모한 DHCP 옵션 세트를 선택합니다.
- [작업]을 선택한 다음, [세부 정보 보기]를 선택합니다.
- 도메인 이름 서버가 AmazonProvidedDNS로 설정되었는지 확인합니다. AmazonProvidedDNS로 설정되어 있지 않다면 조건부 DNS 포워딩을 구성합니다.
태스크 실행 역할 권한 확인
- IAM 콘솔을 엽니다. com.amazonaws.region.ecr.api와 com.amazonaws.region.ecr.dkr VPC 엔드포인트에 연결된 보안 그룹에서 Fargate의 Amazon ECS 태스크에서 포트 443의 수신 연결을 허용하는지 확인하려면 엔드포인트 목록에서 해당 엔드포인트를 선택합니다.
- 탐색 창에서 Roles(역할)를 선택합니다.
- Fargate 작업이 사용 중인 작업 실행 역할을 선택합니다.
- 태스크 실행 역할에 Amazon ECR에서 이미지를 가져올 권한이 있는지 확인합니다.
이미지가 있는지 확인
- Amazon ECR 콘솔을 엽니다.
- Fargate 작업이 이미지를 가져와야 할 Amazon ECR 리포지토리를 선택합니다.
- Amazon ECR의 URI와 태그가 태스크 정의에 정의된 것과 동일한지 확인합니다.
참고: Amazon ECR을 사용하고 있지 않을 경우, 지정된 이미지 리포지토리에 image:tag가 표시되는지 확인하세요.