aws

Amazon ECR에서 태그 없는 이미지들 제거하기 - 용량만 축내고 있는 이미지들 없애버리죠!

Jㅐ둥이 2024. 10. 5. 08:15
반응형

안녕하세요. 진짜 너무 갑작스럽게 날씨가 추워졌습니다.
제 와이프는 코도 훌쩍이네요 ㅜㅠ 이제 대한민국에 봄, 가을은 없어진 것 같습니다...
 
이번에는 Amazon ECR(Elastic Container Registry)에서 태그 없는 이미지들을 제거하는 방법을 정리해보려고 합니다.


TL-DR

  • Amazon ECR의 태그 없는 이미지들을 제거하는 이유는? 자꾸 거슬려서...!
  • 태그 없는 이미지들을 관리하는 가장 효율적인 방법은? ECR 레포지토리의 수명 주기 정책을 이용하는 것!

Q. 태그 없는 이미지들을 왜 제거하는 것이죠?

최근에 AWS 비용을 모니터링 하면서 불필요한 지출들을 줄이고 있었습니다.

 
적은 비용이기는 하지만 ECR에 저장된 이미지들의 용량 때문에 비용이 지출되고 있는 것을 보게 되었습니다.
 
기능 개발이 develop 브랜치에 머지될 때마다 1) ECR에 이미지 푸시, 2) 개발 스테이지에 자동 배포되고 있습니다.
1)에서 ECR에 이미지를 푸시할 때 동일한 태그를 사용하고 있기 때문에, 이전에 배포된 이미지의 태그는 사라지고 그대로 방치되는 것이었죠.

  • 태그가 없는 이미지들은 따로 사용할 일이 없어서 비용만 축내고 있는 것이었습니다.

 
비용이 적어서 우선 순위는 낮았지만 모니터링 할 때마다 매번 신경 쓰여서 퇴근하고 스크립트를 만들어봤습니다!

  • ECR의 스토리지 비용은 GB 당 0.1 달러입니다.
  • 저희들은 멀티 스테이지 빌드를 이용해서 이미지의 크기를 50MB 정도로 줄였기 때문에 비용 부담이 적은 편이었습니다.

 

1. AWS CLI를 이용해서 태그 없는 이미지들을 제거하기

스크립트를 사용하는 방법은 간단합니다!
 
1. 아래의 스크립트를 remove_untagged_ecr_images.sh 라는 파일로 저장해주시고
2. chmod +x remove_untagged_ecr_images.sh 명령어를 이용해서 스크립트에 실행 권한을 부여한 뒤
3. ./remove_untagged_ecr_images.sh 명령어로 스크립트를 실행하면 됩니다!
 

  • 스크립트를 실행하면 태그 없는 이미지들이 영구적으로 삭제되므로 주의하세요!
  • 이미지를 하나씩 제거하다보니 시간이 오래 소요될 수 있습니다... 양해 부탁드립니다
#!/bin/bash

# AWS ECR 레포지토리 이름들을 REPOSITORY_NAMES에 작성해세요.
# ex1 - 레포지토리가 1개일 때) REPOSITORY_NAMES=( "repository1" )
# ex2 - 레포지토리가 여러 개 일때) REPOSITORY_NAMES=( "repository1" "repository2" )
REPOSITORY_NAMES=(  )

for REPOSITORY_NAME in  ${REPOSITORY_NAMES[@]}; do
    # ECR에서 태그 없는 이미지 목록 가져오기
    UNTAGGED_IMAGES=$(aws ecr list-images --repository-name $REPOSITORY_NAME --filter "tagStatus=UNTAGGED" --query 'imageIds[*].imageDigest' --output text)

    # 태그 없는 이미지가 있는 경우 삭제
    if [ -n "$UNTAGGED_IMAGES" ]; then
        echo "$REPOSITORY_NAME 의 태그 없는 이미지를 제거하겠습니다."
        for IMAGE_DIGEST in $UNTAGGED_IMAGES; do
            aws ecr batch-delete-image --repository-name $REPOSITORY_NAME --image-ids imageDigest=$IMAGE_DIGEST > /dev/null
            echo "$REPOSITORY_NAME => 삭제된 이미지 해시값: $IMAGE_DIGEST"
        done
    else
        echo "$REPOSITORY_NAME 에서 태그 없는 이미지를 찾지 못했습니다."
    fi
    echo "==================================="
done

 
 

2. Amazon ECR 레포지토리의 수명 주기 정책 규칙을 이용해서 태그 없는 이미지들 제거하기

스크립트를 이용하는 방법보다 더 간단한 방법이 있습니다.
바로 Amazon ECR 레포지토리의 수명 주기 정책 규칙을 이용하는 것이죠!
 
이제부터 방법을 구체적으로 알려드리겠습니다.
 
1. AWS Console에서 Amazon ECR 서비스 페이지에 접속합니다.

Amazon ECR 서비스 페이지 접속!

 
2. 수명 주기 정책 규칙을 추가하고 싶은 레포지토리를 선택하고 작업 버튼을 클릭하면 수명 주기 정책 항목을 찾을 수 있습니다.
수명 주기 정책 항목을 클릭해줍니다.

수명 주기 정책 항목 클릭

 
3. 선택한 레포지토리의 수명 주기 정책 페이지에서 규칙 생성 버튼을 클릭해줍니다.

규칙 생성 버튼 클릭

 
4. 규칙 설명, 며칠 후에 태그 없는 이미지를 제거할지 정한 후 저장 버튼을 클릭합니다.

규칙 옵션 설정

 
5. 끝!

반응형