AWS SDK for Python boto3でインスタンスAMIを保存する

boto3を使ってAMIを保存する。必要情報はアクセスキーなど基本的なものと取りたいInstanceId。

client = boto3.client('ec2',  
    aws_access_key_id=parsed['access_key'],
    aws_secret_access_key=parsed['secret_key'],
    region_name=parsed['region']
)

image_response = client.create_image(
    InstanceId='i-hogehogehoge',
    Name='hogehogeName',
    Description='hogehogeDescription',
    NoReboot=True
)

こんな感じで簡単に取るように指示を出せる。 NoRebootで再起動させない事もできる。ただ、そうなるとAWS非推奨でデータの整合性は担保できないため注意。 まぁ、それでも再起動させたくないケースは多いハズ。 また、ブラウザ経由と同じくNameは重複できないので、時間やら乱数入れるなりしてかぶらないように。

取り終わったあとに何かさせたい場合には

waiter = client.get_waiter('image_available')
waiter.wait()

などで待たせたあとに何か処理をかけば良い。ただ、AMIの作成完了までの時間があまりに長いもの(1時間以上?未確認)だと、 エラーを出してしまうらしいので注意。 その場合はwaiterなどの処理方法を変えてあげてね。