간단하게 AWS ECR 비용 줄이기

김형섭 (Matthew)·2024년 4월 15일
8

개발 팁/테크

목록 보기
12/15
post-thumbnail

Why

AWS ECR은 컨테이너 이미지를 저장하는 리포지토리 서비스 입니다.
일반적인 애플리케이션은 컨테이너 이미지 용량이 수십MB ~ 수백MB 사이라서 ECR에 저장해두어도 비용적으로 크게 생각치 않으셨을 거예요.

ECR은 비용이 별로 안들것 같죠?
근데 세월이 흐르면 이야기가 달라집니다.

ECR을 어떻게 사용하길래요?

2개의 ECR 레포 스크린 샷을 봅시다.

1번 이미지 레포

2번 이미지 레포

2개의 차이는 단지, 태그가 없는 이미지의 갯수 입니다.

ECR은 저장중인 용량에 비례 하여 요금이 청구 되는데요.
새 이미지를 배포할 때마다, 1번은 구 이미지가 누적되고 있고, 2번은 항상 마지막 한개만 있습니다.

왜 차이가 발생 하나요?

1번 레포는 개발자가 ECR에 배포할때 구 이미지를 지우지 않은 것이고요.
2번 레포는 배포 할 때마다 지워준 것 입니다.

그래서 시간이 지날 수록 저장 용량의 차이가 어마어마 해집니다.
아… 지워줘야 하는군요.

그렇습니다만, 이게 무지하게 귀찮죠.

그런데,

신박한 방법이 있습니다.
이 작업은 ECR 레포를 만들때부터 하는게 좋아요.

ECR 라이프사이클 정책 설정

AWS콘솔의 ECR 메뉴 좌측에 보시면 Lifecycle Policy 메뉴가 있습니다.

작업할 레포를 선택하고, 좌측의 이 메뉴로 이동 하신 후에 삭제 정책을 만들어주세요.

대부분 새 이미지를 배포할때 롤백을 대비해 직전 이미지 하나 또는 2개만 있으면 됩니다.
따라서 너무 복잡하지 않게 간단히 정하는게 좋아요.

저는 왠만하면 1개 이상의 Untagged 이미지만 지우게 설정 합니다.

ECR에 새 이미지를 같은 태그명으로 배포하면, 구 이미지는 태그가 삭제되어 Untagged 상태가 되는 것을 이용 합니다.

대충 이렇게 만듭니다.

  • 태그가 지정되지 않음
  • 1개 이상의 이미지

이제 이 레포에, 새 이미지 푸시 할때마다 같은 태그를 가진 구 이미지가 언태그가 되고,
1개 이상의 언태그 이미지 (2개 전 이미지)는 바로 삭제 됩니다.

이로써 비용을 절약 할 수 있습니다.
라이프 사이클 설정은, 레포마다 각각 해주셔야 합니다.

안지우면 용량, 비용이 얼마나 크길래

ECR은 이미지를 저장하는 비용, 이를 pull 받는 전송 비용 등으로 나누어져 있는데,
지금 우리가 주목 하는건 저장 비용 즉, 스토리지 비용입니다.

ECR의 저장비용 가격은 0.10 USD / GB / 월 입니다.
에이 얼마 안하네~ 할 수 있죠.

근데, 안 지우잖아요?

이미지당 300MB로 가정 하고 계산해볼께요.
일일 자동 배포 시스템에 의해 하루 한번 배포 한다면, 저장용량은 0.3GB 입니다.

0.3GB * 365 = 109 GB 입니다. 가격은 월 $10 이 되네요.
아직 적다고 생각하나요?
아임웹의 경우 ECR 레포가 약 100개 입니다. 월 $1,000 이 되버리네요.

자, ECR 관리를 왜 해줘야 하는지 아시겠죠?

마무리

AWS 비용 최적화, 어찌보면 진부한 주제이지만 지금 실리콘밸리 에서는 Devops 보다 더 강조하는 Finops 에 부합하는 주제 입니다.

비용을 관리하는데 있어 어마어마한 트릭이나 비법이 있지 않습니다.
작은 차이가 그 갯수로 인해 큰 차이를 만들게 되거든요.

작은 노력으로 돈을 벌어보세요.
감사합니다.

매튜 드림.

profile
CTO at Imweb, 20년차 개발 장인, 전) 플레이오토 CTO/창업자

2개의 댓글

comment-user-thumbnail
2024년 6월 26일

최적화에 관심 많아서 이것저것 찾아보다가 좋은 글 발견했네요 ⸝⸝ʚ̴̶̷̆ˬʚ̴̶̷̆⸝⸝ 공유 감사합니다

1개의 답글