1
0

More than 3 years have passed since last update.

AWS CLIでECRの棚卸しをしつつ、Lifecycle Policyの設定の有無やストレージ使用量を出力します。

Last updated at Posted at 2021-03-15

背景

特定のAWSアカウントだけECRの値段が跳ね上がっていたので調査しました。
ECRの料金はストレージ量とデータ転送量の2点ですが、ストレージ使用量を調べてみました。

ECRの料金についてはこちら!

※以下は20210315時点の東京リージョンの値段です

ストレージ数 料金
すべてのGB/月あたり 0.10USD
データ受信 料金
すべてのデータ受信 0.00USD/GB
データ送信 料金
1 GB/月まで 0.00USD/GB
次の 9.999 TB/月 0.114USD/GB
次の 40 TB/月 0.089USD/GB
次の 100 TB/月 0.086USD/GB
150 TB/月以上 0.084USD/GB

各種バージョン

$ aws --version
aws-cli/2.1.30 Python/3.8.8 Darwin/20.3.0 exe/x86_64 prompt/off

$ jq --version
jq-1.6

スクリプト

#!/bin/bash

PROFILE="profile-12341234"

REPOSITORYS=$(aws ecr describe-repositories \
    --profile ${PROFILE} \
    --query 'repositories[*].repositoryName' \
    --output text)

for REPOSITORY in ${REPOSITORYS}
do
    RES=$(aws ecr describe-images \
        --repository-name ${REPOSITORY} \
        --profile ${PROFILE})
    # ポリシーがなければNotFoundExceptionに入るのでエラーは捨てる
    POLICY=$(aws ecr get-lifecycle-policy \
        --repository-name ${REPOSITORY} \
        --profile ${PROFILE} 2> /dev/null)
    if [ $? -gt 0 ]; then
        IS_ENABLE_POLICY=0
    else
        IS_ENABLE_POLICY=1
    fi
    echo "${REPOSITORY},$(echo ${RES} | jq '[.imageDetails[].imageSizeInBytes] | add'),$(echo ${RES} | jq '[.imageDetails[]] | length'),${IS_ENABLE_POLICY}"
done

出力結果

以下のようにCSV形式で出力されます。

リポジトリ名, サイズ(byte), イメージ数, Lifecycle Policyが有効かどうか

repository1,15209655632,72,0
repository2,null,0,1
repository3,null,0,0

この結果をもとにLifecycle Policyで特定数以上のイメージは削除するなどの設定を加えるといいかもしれません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0