나는 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.s3
com.amazonaws.ap-northeast-2.ecr.api
com.amazonaws.ap-northeast-2.ecr.dkr
com.amazonaws.ap-northeast-2.logs
4가지 엔드포인트
를 설정하는 방법을 실습할 것이다.
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 엔드포인트 테라폼 소스
참고자료: