メインコンテンツへスキップ

LambdaでEBSスナップショットを作成する。

    構成

    画像

    構成はこんな感じ。
    client側はAWSCLIでLambdaを呼び出す。
    Lambdaはboto3でsnapshot操作を行い、バックアップ対象ボリュームのスナップショットの作成、定期削除などを行う。

    ソースコード


    import boto3
    
    def lambda_handler(event, context):
     
    client=boto3.client('ec2')
    instance=client.describe_instances(
        Filters=[
            {
                'Name':'tag:backup',
                'Values':['enable']
            }
            ]
        )['Reservations']
    
    for instance_reservations in instance:
        for instance_instances in instance_reservations['Instances']:
            instance_id=instance_instances['InstanceId']
            client.create_snapshots(
                InstanceSpecification={
                    'InstanceId':instance_id
                },
                TagSpecifications=[
                    {
                        'ResourceType':'snapshot',
                        'Tags':[
                            {
                                'Key':'system',
                                'Value':'test'
                            }
                            ]
                    }
                    ]
                )

    まず、対象のインスタンスタグ(backup=enable)でフィルターをかけて、バックアップ対象のインスタンスIDを取得する。
    辞書型のjson形式ででてくるので、インスタンスIDを取り出すのは少々面倒ですが、forとか使って取り出してcreate_snapshots()に指定している。
    この時タグコピーしてくれないので、一緒にタグもちゃんとつけるように。


    引っかかったこと

    Lambda移植前にローカル環境で直接boto3のスクリプトを組んで検証していたのだが、スナップショットの作成が重複が発生した。バックアップ対象ボリュームは3つくらいなのに、スナップショットが6個~15個など複数個作成されて非常に困ってしまった。
    恐らく検証過程で何度もスクリプトを実行していたことでboto3.clientセッションが複数接続状態のままになっていたようで、Lambdaへ移植することで解決した。同志諸君も注意してくれたまい。

    今回はcreate_snapshots()で実行しているがcreate_snapshot()でも可能。
    その場合はdescribe_volume()などで対象のVolumeIdを取得し、指定すれば同様のことが再現できる。
    私が見かけた記事ではcreate_snapshot()のパターンが多かったので、create_snapshots()バージョンのコードを提示した。

    次回、Snapshot削除編へつづく。
    https://note.com/oshiri_prinprin/n/n5769c4e2b642

     
     

    お尻

     
     
    こんにちは、ポンコツエンジニアやってます。フリーランスはじめました。 技術記事書いたり、NHKラジオや洋本読んで、読書感想文書いたり、情報系勉強したくなくて英語、フランス語勉強したり…仕事辞めて語学学校行ったり…合気道教室行ったり、 飽き性で続かんなりに細々色んなこと書いてます。

    あなたへのおすすめ