LoginSignup
2
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-01-14

「不要になった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登録解除時に消し忘れたスナップショットのことだけを指します。各々が手動で作成したスナップショットは、タグ付けなどをして自己で管理してください。

2
2
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
2