背景
特定の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で特定数以上のイメージは削除するなどの設定を加えるといいかもしれません。