web-dev-qa-db-ja.com

EC2 AMIを削除する方法

コマンドec2-create-image instance-idは、ec2インスタンスのイメージを作成し、スナップショットファイルを作成して、AMIとして登録します。しかし、関連するスナップショットファイルを削除してAMIを登録解除するイメージを削除するための同等のコマンドは何ですか?

45
James W.

aws docsからの更新された回答:

  1. https://console.aws.Amazon.com/ec2/ でAmazon EC2コンソールを開きます。
  2. ナビゲーションバーで、地域を確認します。
  3. ナビゲーションパネルで[AMI]をクリックします。
  4. AMIを選択し、[アクション]をクリックして、[登録解除]をクリックします。確認を求められたら、[続行]をクリックします。
  5. ナビゲーションペインで、[スナップショット]をクリックします。
  6. スナップショットを選択し、[アクション]をクリックして、[削除]をクリックします。確認を求められたら、[はい、削除します]をクリックします。

これが私のような人を助けることを願っています! :D

61

あなたが探しているものへの 通常 4ステップがあります:

  1. AMIを使用してインスタンスを終了します(特にS3でサポートされているAMIに推奨されるプラクティス) [任意のタイプのAMIを削除する前には不要]
  2. ec2-deregister を使用してAMIを登録解除します
  3. ec2-delete-bundle (S3の場合)または ec2-delete-snapshot (EBSの場合)を使用して、AMIをバッキングするバンドル/スナップショットを削除します。
  4. EBSボリュームを削除します(終了時に削除するように設定されている場合を除き、その場合、手順1で削除されます)。これは、S3でバックアップされたインスタンスには必要ありません。 [ここでも、AMIを削除するだけの場合は、インスタンスを終了したりボリュームを削除したりする必要はありません。]

スナップショットとイメージは独立していることに注意してください。スナップショットからEBSボリュームを作成して、ブートドライブとしてではなくセカンダリドライブとして使用できます。さらに(Linuxインスタンスの場合)既存のスナップショットから新しいイメージを作成することもできます。これは、イメージを削除したいすべての人が関連するスナップショットも削除したいとは限らないという考えに根拠があります。 (スナップショットを登録してWindows AMIを作成することはできますが、AMIは起動できません。)

AWSでは、AMIの登録を解除する前に、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)
7
cyberx86

awscli でもこれを実行できます。

まず、describe-imagesを使用してスナップショットIDを取得します。

aws ec2 describe-images --image-ids AMI-0123456789

次に、イメージを登録解除し、スナップショットを削除します。

aws ec2 deregister-image --image-id AMI-0123456789
aws ec2 delete-snapshot --snapshot-id snap-9876543210
2
kristi
#!/bin/bash

#put your AMI's in AMI.txt

for i in `cat AMI.txt`;
do

#put the regions in regions.txt

for r in `cat regions.txt`;do echo $r >>/dev/null;
for e in `cat regions.txt`;do aws ec2 describe-images --image-ids $i --region $r | grep "ImageId\|SnapshotId" | awk -F':' '{print $2}' | tr -d '"',',' | grep "snap" > snapshot.txt;
for s in `cat snapshot.txt`;do aws ec2 deregister-image --image-id $i --region $r;
aws ec2 delete-snapshot --snapshot-id $s --region $r;echo $i $s >> amidel.txt;done;done;
done;
done

#you can check the AMI/snapshots which has been de-registered/deleted
0
arun kumar