Help us understand the problem. What is going on with this article?

無駄なEBSスナップショットをLambdaで定期削除する

「不要になったAMIを登録解除したけど、EBSスナップショットは消し忘れちゃって無駄なスナップショットがたくさん残っちゃってる...」ってこと結構あると思います。
こういう明らかに不要なスナップショットは、Lambdaの定期実行などを利用して自動的に削除されるようにしちゃいましょう。

無駄なスナップショットを残しておくと、スナップショットの管理が煩雑になるし、そのスナップショットにも費用がかかるので、消しちゃうに越したことはありません。

まずAMI登録解除時に消し忘れたスナップショットを一括削除するLambdaは以下のようになります。

import boto3

ec2 = boto3.client("ec2")

def lambda_handler(event, context):
    #AMIと共に作られたsnapshotを抽出
    response = ec2.describe_snapshots(
            Filters=[
                {
                    'Name': 'description',
                    'Values': [
                        'Created by CreateImage*',
                    ]
                },
                {
                    'Name': 'owner-id',
                    'Values': ['************'] #AWSアカウントID
                }
            ]
        )


    is_unnecessary = {}
    for snapshot in response['Snapshots']:
        is_unnecessary[snapshot['SnapshotId']] = True

    #現在登録中のAMIを抽出
    response = ec2.describe_images(
        Filters=[
                {
                    'Name': 'owner-id',
                    'Values': ['************'] #AWSアカウントID
                }
            ]
    )

    #現在登録中のAMIで使われているsnapshotのみFalseにする
    for image in response['Images']:
        for bdm in image['BlockDeviceMappings']:
            try:
                is_unnecessary[bdm['Ebs']['SnapshotId']] = False
            except KeyError:
                continue


    i = 0
    for snapshot_id in is_unnecessary.keys():
        if is_unnecessary[snapshot_id]:
            ec2.delete_snapshot(SnapshotId=snapshot_id)
            i = i + 1

    print('Delete ' + str(i) + ' Snapshots')

これをCloudWatch Eventsを使って定期実行させます。
cron式を使えば簡単に定期実行させることができます。
Schedule Expressions for Rules
例えば月次実行とかにしたい場合は0 0 1 * ? *とかで大丈夫です。

これで定期的に無駄なEBSスナップショットが削除されるようになります。

※注意: ここでいう「不要なスナップショット」はAMI登録解除時に消し忘れたスナップショットのことだけを指します。各々が手動で作成したスナップショットは、タグ付けなどをして自己で管理してください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away