[ Python ] AWS Lambda を使って LightSail のスナップショットを作成

INSTANCE_NAME には LightSail のインスタンス名を入力してください。

import boto3
import datetime

INSTANCE_NAME = 'XXX'

def create_snapshot(lightsail,name):
    """
    スナップショットを作成
    """
    timestamp = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
    response = lightsail.create_instance_snapshot(
          instanceSnapshotName = timestamp,
          instanceName = name
    )
    print(f"{INSTANCE_NAME} のスナップショット:{timestamp} を作成しました")
    

def delete_old_snapshot(lightsail,INSTANCE_NAME):
    """
    最も古いスナップショットを削除
    """
    
    all_instance_list_response = lightsail.get_instance_snapshots()
    filtered_instance_list = filter(lambda x: x['fromInstanceName'] == INSTANCE_NAME,all_instance_list_response['instanceSnapshots'])
    sorted_list = sorted(filtered_instance_list, key=lambda x:x['createdAt'])
    
    if len(sorted_list) > 1:
        # 最も古いスナップショットを取得
        old_snapshot = sorted_list[0]   
        old_snapshot_name = old_snapshot['name']
        response = lightsail.delete_instance_snapshot(
                instanceSnapshotName = old_snapshot_name
        )
        print(f"最も古いスナップショット:{old_snapshot_name} を削除しました")
    else:
        print('削除できるスナップショットがありませんでした')
       
   

def lambda_handler(event, context):
    lightsail = boto3.client('lightsail')
    instance = lightsail.get_instance(instanceName=INSTANCE_NAME)
    try:
        create_snapshot(lightsail,INSTANCE_NAME)
        delete_old_snapshot(lightsail,INSTANCE_NAME)
        return 'SUCCESS'
    except Exception as e:
        print(e)
        return 'ERROR'

Related Contents

Pickup Contents