2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS CLIで一定期間更新されていないロググループを一掃

Posted at

はじめに

検証環境にロググループがどれくらいあるかを見たことがあるでしょうか。
僕の検証環境には310個のロググループがいました。
310.png

ロググループのストリームの数や保持期間にもよりますが、大体50円/月ほどかかっています。
費用的には大したことなく、「なんか気持ち悪いなぁ」という程度なので消さなくても良いかと思います。

ただ、先日JAWS-UG CLI支部でCloudWatch Logsのハンズオンをやったこともあり、理解を深める意味でロググループを一掃するコマンドを作ってみることにしました。

でも、使用中のロググループもあり、全部消す訳にもいかないので、一定期間更新されていないロググループのみ消すようにします。

手順

1. 削除したいリージョンでCloudShellを起動

cloudshell.png

2. 全ロググループを抽出する

コマンド

ARRAY_LOG_GROUP_NAMES=$( \
aws logs describe-log-groups \
    --query 'logGroups[*].logGroupName' \
    --output text
) \
  && echo ${ARRAY_LOG_GROUP_NAMES}

結果(例)
実行したリージョンに存在しているロググループがスペース区切りで全て出力

/aws/lambda/appmesh-xxxx /aws/lambda/no1 ... test-log-group-1 test-log-group-2 test-log-group-3 ... test-log-group-4month-ago test-log-group-2month-ago

3. 削除対象とする期間を指定

  • dateコマンドで3ヶ月前のタイムスタンプを取得
  • AWS CLIで使える形式にするために000を追加

コマンド

THREE_MONTH_AGO_DATE=$(date -d '3 month ago' +%s)000 \
  && echo ${THREE_MONTH_AGO_DATE}

結果(例)

1649930797000

4. 削除対象の抽出

コマンド

for i in $(echo "${ARRAY_LOG_GROUP_NAMES%None*}");do
  x=$( \
    aws logs filter-log-events \
      --log-group-name ${i} \
      --max-items 1 \
      --start-time ${THREE_MONTH_AGO_DATE} \
      --query 'events[].logStreamName' \
      --output text \
  )
  if [ -n "$x" ]; then
    ARRAY_LOG_GROUP_NAMES=`echo ${ARRAY_LOG_GROUP_NAMES} | sed -e s@$i@@`
  fi
done \
  && echo ${ARRAY_LOG_GROUP_NAMES}

結果(例)
手順1で出力されたロググループから、指定した期間内で更新されたロググループが取り除かれて出力

/aws/lambda/appmesh-xxxx /aws/lambda/no1 ... test-log-group-1 test-log-group-2 test-log-group-3 ... test-log-group-4month-ago

ロググループが少ないリージョンで試してみたところ、3ヶ月間で更新されロググループが削除対象から消えていることを確認
(見やすさのために改行していますが、実際はスペース区切りの1行で出力)
hikaku.png

5. ロググループの削除

コマンド

for delete in $(echo "${ARRAY_LOG_GROUP_NAMES%None*}");do
    aws logs delete-log-group \
      --log-group-name ${delete} 
done

結果(例)

出力なし

実行後

ロググループの数が63まで減った!
63.png

今後の展望

  • AWS CLIスクリプト → Lambda(python) + EventBridgeに書き換え、
    自動化できそう
    • ただ増えても100円/月いくか怪しいので、作成する必要があるか微妙...
  • 全リージョンのロググループを一括で削除できるようにする
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?