Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
기존에는 VPC Interface Endpoint 중에 ecr.api만 연결해 주면, ECR private link로 연결되는 알았다.
하지만 테스트 결과, NAT Gateway를 VPC에서 빼주면 Fargate가 ECR에서 컨테이너 이미지를 가져오지 못하는 것을 확인했다.
결론을 이야기 하면, ECR 연결을 위해서는 아래의 3가지 Endpoint가 필요하다.
Interface endpoint: ecr.dkr, ecr.api
Gateway endpoint: S3
dkr까진 이해가되도 S3는 굉장히 뜬금없지 않은가?
그 이유를 지금부터 확인해보자.
Docker hub는 S3 저장소를 사용
아래의 Cloud flare(네트워크 전문 회사로 주로 CDN 서비스에서 확인해 본 적 있을 것이다.)의 케이스 스터디 글을 확인해 보자.
https://www.cloudflare.com/case-studies/docker/
Cloudflare는 Docker의 캐시 적중률을 99% 이상으로 높여서, S3의 송신 발생을 2/3까지 제거했다고 한다.
S3는 무엇이든 저장하는 저장소로는 훌륭할지 몰라도, CDN 서비스가 아니기 때문에 데이터 송신을 제공하면 상당한 비용이 발생한다. Cloud front라도 송신 비용은 S3와 동일하다.
따라서 CDN을 AWS의 Cloud front가 아닌 Cloud flare의 CDN 서버를 통해 제공하여, 훨씬 큰 비용 절감을 가져간 듯하다.
ECR도 S3 저장소를 사용
AWS의 컨테이너 서비스를 사용할 때, Docker hub에서 이미지를 가져올 수도 있지만, public 망으로 요청과 수신이 이뤄지므로 보안적으로는 좋지 않다.
따라서 AWS의 ECR을 사용하게 되는데, 결국 ECR도 크고 많은 컨테이너 이미지들을 독자적인 저장소가 아닌 AWS S3로 저장하게 설계되었다. 따라서 Amazon S3 서버 측 암호화를 사용해 자동으로 암호화도 진행된다.
ECR은 이미지 매니페스트까지만 제공해 주기 때문에 결국 S3에서 실제 이미지 Layer를 받아와야 한다.
단일 VPC라면 S3 Gateway endpoint를 사용하는 것이 좋고, 다중 VPC/계정이라면 Interface endpoint를 배치하여 접근 세팅을 세분화할 수 있다.
실제로 S3가 연결되지 않으면, 아래처럼 연결 오류가 발생한다.
결론
결론적으로 ECR 연결을 위해서는 아래의 3가지 Endpoint가 필요하다.
Interface endpoint: ecr.dkr, ecr.api
Gateway endpoint: S3
(본인은 단일 VPC이므로 Gateway 타입을 선택했다.)
ecr.api의 경우 레지스트리 생성, 이미지 목록 조회와 같은 기능을 위해 사용하고,
ecr.dkr은 Docker 클라이언트와 통신하여 이미지를 푸시(push)하고 풀(pull)하는 데 사용된다.
이렇게 하나의 서비스에서도 종류별로 다르게 제공되다 보니, 비용적으로는 ECR 연결이 부담될 수 있을 것 같다.
참조글
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/privatelink-interface-endpoints.html
'Cloud > AWS' 카테고리의 다른 글
AWS ECS Fargate 모니터링 (1) - Side car (otel), AMP (0) | 2024.07.02 |
---|---|
AWS ECS Task와 Service 그리고 Auto scaling (Terraform) (0) | 2024.07.02 |
[EC2 Ubuntu] AWS PHP SDK 세팅 및 DynamoDB 테스트 (0) | 2024.05.20 |
CodeDeploy ECS 블루/그린 배포 방식 살펴보기 (0) | 2024.05.20 |
AWS Elastic cache Memcached의 노드간 복제 여부 확인 (0) | 2024.05.07 |