回答:
AWSドキュメントからの更新された回答:
これが私のような人を助けることを願っています!:D
ec2-deregister
ec2-delete-bundle
(S3の場合)またはec2-delete-snapshot
(EBSの場合)を使用して、AMIをバッキングするバンドル/スナップショットを削除します。スナップショットとイメージは独立していることに注意してください。スナップショットからEBSボリュームを作成し、ブートドライブの代わりにセカンダリドライブとして使用できます。さらに(Linuxインスタンスの場合)、既存のスナップショットから新しいイメージを作成することができます。これは、イメージを削除するすべての人が関連するスナップショットも削除するわけではないという考えに根拠を与えます。(スナップショットを登録してWindows AMIを作成できますが、AMIは起動できません。)
AMIの登録を解除する前に、AWSでAMIに関連付けられたスナップショットを削除できないことに注意してください。
上記の手順2と3に焦点を当て、最初にAMIに関連付けられたスナップショットIDを見つける必要があります。これは、ブロックデバイスマッピングの一部としてリストする必要があります。通常、ルートEBSボリュームにはマウントポイント/ dev / sda1があります。コマンドラインからAMIの登録を解除して(またはAWSコンソールを使用して)、スナップショットを削除できます(コマンドラインまたはAWSコンソールから)。
このタスクをより頻繁に実行する必要がある場合は、プロセスのスクリプトを作成します。Python Botoなどの一部のライブラリには、これを正確に行うための関数が含まれています。
deregister_image(image_id, delete_snapshot=False)
Unregister an AMI.
Parameters:
image_id (string) – the ID of the Image to unregister
delete_snapshot (bool) – Set to True if we should delete the snapshot associated with an EBS volume mounted at /dev/sda1
たとえば、上記に基づいたサンプルスクリプト(完全にテストされておらず、組み合わせただけです-ご自身の責任で使用してください!)は、次のようになります。
#!/usr/bin/env python
import os
import sys
def ec2delete(imageid=None):
conn = boto.ec2.connect_to_region('your_region', aws_access_key_id='your_key', aws_secret_access_key='your_secret')
conn.deregister_image(imageid, delete_snapshot=True)
if __name__ == '__main__':
from optparse import OptionParser
parser = OptionParser()
options, args = parser.parse_args()
sys.stderr.write("Deleting %s and snapshots\n" % str(args))
ec2delete(args)