
나는 ECS 를 운용하고 있었고 ECR 에 있는 도커 이미지 를 task 이미지 로서 사용하고 있었다.
기존에는 ECS 내 fargate 를 퍼블릭 서브넷 에 놓고 있었지만 보안이 신경쓰여 프라이빗 서브넷 으로 옮겼다. 그랬더니 아래와 같이 에러가 발생했다.

ResourceInitializationError: 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.ap-northeast-2.amazonaws.com/": dial tcp 54.180.184.245:443: i/o timeout. Please check your task network configuration.
에러 원인은 fargate 가 ECR 로부터 도커이미지를 가져오지 못했기 때문이었다. fargate 는 프라이빗 서브넷에 있고 프라이빗 서브넷은 기본적으로 VPC 외의 서비스와는 연결이 불가능하기 때문이다. 그렇다면 private subnet 에 있는 ECS 의 fargate 가 도커 이미지를 받기 위해 ECR 에 접근하려면 어떻게 해야될까?

private subnet 은 기본적으로는 외부와의 연결이 차단되어 있기에 fargate 는 ECR 에서 도커 이미지 를 받아올 수 없다.
그럼에도 fargate 는 ECR 에서 도커 이미지 를 받을 수 있는 방법이 있었는데 그 중에 VPC 엔드포인트 설정 을 공유하려 한다.
ECR 에 접근하기 위해서는 아래와 같은 4가지 엔드포인트가 필요하다.
com.amazonaws.ap-northeast-2.s3com.amazonaws.ap-northeast-2.ecr.apicom.amazonaws.ap-northeast-2.ecr.dkrcom.amazonaws.ap-northeast-2.logs4가지 엔드포인트 를 설정하는 방법을 실습할 것이다.
VPC 에 들어가 엔드포엔트 생성을 누른다.

VPC 를 지정한다.
fargate 가 존재하는 private subnet 을 선택한다.
보안 그룹 을 지정한다.
매우 중요 !!
나는 테스트를 위해서 보안 그룹을모든 IP에 대해서모든 트래픽허용하는 보안 그룹으로 지정하였다. 설정이 잘못되면 정상적으로 동작하지 않는다.
테스트가 목적이라면모든 IP에 대해서모든 트래픽으로 설정하고 진행하자.
VPC 엔드포인트 를 생성한다.
ecr.api 을 ecr.dkr 로 바꿔주고 🔹 STEP 1 과 동일하게 진행한다.
ecr.api 을 logs 로 바꿔주고 🔹 STEP 1 과 동일하게 진행한다.
엔드포인트 유형이 2가지가 나타날텐데,
interface유형으로 지정한다.
VPC 에 들어가 엔드포엔트 생성을 누른다.s3, 유형: Gateway 를 지정한다.
VPC 및 생성할 fargate 의 private subnet 에 연결되어있는 routing table 을 모두 지정한다.
VPC 엔드포엔트 를 생성한다.월 1000G 의 트래픽을 사용한다고 가정했을 때에 약 5만원 (47.96 달러) 의 비용이 발생한다.
계산 비용 링크 참조
계산방식은, 하나의 VPC 엔드포인트당 월 약 만원이 발생하고 트래픽당 추가 비용이 발생하는 방식이다.

NAT Gateway 를 사용할 시에는 약 2배의 비용이 더 나온다.

과금이 걱정된다면 NAT Instance 를 고려해봐도 좋을 듯하다.
테라폼으로 VPC 엔드포인트를 만들어보았습니다.
- VPC 엔드포인트 테라폼 소스
참고자료: