Cara menghapus EC2 AMI

43

Saya tahu bahwa perintah ec2-create-image instance-idtersebut akan membuat gambar instance EC2, membuat file snapshots dan mendaftar sebagai AMI. Tapi apa perintah yang setara untuk menghapus gambar yang akan menghapus file snapshot terkait dan membatalkan registrasi AMI?

James W.
sumber
Lihat Cara menghapus AMI EC2 pribadi dari AWS
Aniket Thakur

Jawaban:

56

Jawaban yang diperbarui dari aws docs:

  1. Buka konsol Amazon EC2 di https://console.aws.amazon.com/ec2/ .
  2. Di bilah navigasi, verifikasi wilayah Anda.
  3. Di panel navigasi, klik AMI.
  4. Pilih AMI, klik Tindakan, lalu klik Deregister. Saat diminta konfirmasi, klik Lanjutkan.
  5. Di panel navigasi, klik Snapshots.
  6. Pilih snapshot, klik Tindakan, lalu klik Hapus. Saat diminta konfirmasi, klik Ya, Hapus.

Semoga ini bisa membantu orang seperti saya! : D

Benjamin Smith Max
sumber
2
Hanya dengan menambahkan beberapa sen ke jawaban Benjamin Smith Max untuk menghapus foto. Anda harus terlebih dahulu membatalkan pendaftaran AMI di konsol sebelum foto dapat dihapus.
tarvinder91
3
Jika catatan AMI Anda masih berkeliaran, lakukan saja pemuatan ulang dengan mem-bypass cache: Windows: Ctrl + Shft + R atau di macOS: ⌘ + ⌥ + R.
André Hauptfleisch
CATATAN: Mungkin diperlukan beberapa menit sebelum konsol menghapus AMI dari daftar. Pilih Refresh untuk menyegarkan status.
Aniket Thakur
7

Ada biasanya 4 langkah untuk apa yang Anda cari:

  1. Hentikan instans menggunakan AMI (merekomendasikan praktik terutama untuk AMI yang didukung S3) [Tidak diperlukan sebelum menghapus AMI dari jenis apa pun]
  2. AMI Deregister menggunakan ec2-deregister
  3. Hapus bundel / foto yang mendukung AMI menggunakan ec2-delete-bundle(untuk S3) atau ec2-delete-snapshot(untuk EBS).
  4. Hapus volume EBS (kecuali jika diatur untuk dihapus pada penghentian, dalam hal ini, mereka akan dihapus pada langkah # 1). Ini tidak perlu untuk instance yang didukung S3. [Sekali lagi, tidak perlu mengakhiri instance atau menghapus volume jika Anda hanya ingin menghapus AMI.]

Perlu diingat bahwa foto dan gambar adalah independen. Anda dapat membuat volume EBS dari snapshot dan menggunakannya sebagai drive sekunder alih-alih sebagai boot drive. Lebih lanjut (dalam kasus Linux misalnya) dimungkinkan untuk membuat gambar baru dari snapshot yang ada - yang memberikan alasan pada gagasan bahwa tidak semua orang yang ingin menghapus gambar juga ingin menghapus snapshot terkait. (Meskipun Anda dapat mendaftarkan snapshot untuk membuat AMI Windows, AMI tidak dapat diluncurkan.)

Perlu dicatat bahwa AWS tidak akan membiarkan Anda menghapus snapshot yang terkait dengan AMI sebelum Anda membatalkan registrasi AMI.

Berfokus pada langkah 2 dan 3 di atas, Anda harus terlebih dahulu menemukan ID snapshot yang terkait dengan AMI. Ini harus terdaftar sebagai bagian dari pemetaan perangkat blok. Biasanya, volume EBS root memiliki titik mount / dev / sda1. Anda dapat membatalkan registrasi AMI dari baris perintah (atau menggunakan konsol AWS) dan kemudian menghapus snapshot (lagi, baik dari baris perintah atau konsol AWS).

Jika Anda perlu melakukan tugas ini lebih sering, Anda ingin membuat skrip proses. Beberapa perpustakaan seperti Python Boto menyertakan fungsi untuk melakukan hal ini:

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

Misalnya skrip sampel (benar-benar belum diuji, dan hanya dirakit - gunakan dengan risiko Anda sendiri!) Berdasarkan pada contoh di atas mungkin terlihat seperti:

#!/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)
cyberx86
sumber
1
Tidak perlu menghentikan instance AMI sebelum menghapus AMI. AMI hanya digunakan untuk memulai instance dan mereka dapat terus berfungsi dengan baik tanpa itu. Namun, jika Anda menghapus AMI dan instans gagal, maka mungkin sulit untuk memulai instans pengganti tanpa AMI, jadi berhati-hatilah.
Eric Hammond
1
AWS digunakan untuk merekomendasikan penghentian instance untuk 'pembersihan lengkap', namun, pada prinsipnya tidak diperlukan untuk menghapus AMI. Saya bertanya-tanya apakah itu mungkin penting dalam beberapa kasus tepi, karena volume EBS memuat 'malas', jika snapshot dihapus sesaat setelah instance diluncurkan, tetapi sebelum volume EBS telah dimuat penuh, itu bisa bermasalah.
cyberx86
@ cyberx86: Jika penghapusan snapshot memengaruhi pembuatan volume baru, itu akan menjadi masalah yang lebih besar dari sekadar menghapus AMI. Mengingat berapa lama yang diperlukan untuk mengisi volume sepenuhnya dari foto, itu harus mudah untuk diuji dengan foto yang penuh dengan data.
Eric Hammond
2
@EricHammond: pencarian cepat menunjukkan bahwa AWS tampaknya tidak akan menghapus snapshot sampai data dimuat, tetapi masih akan membiarkan Anda melakukan penghapusan (mungkin hanya memegang snapshot itu sampai tidak diperlukan).
cyberx86
@ cyberx86: Seperti yang saya duga, tetapi senang mengetahui pasti. Terima kasih telah melihatnya.
Eric Hammond
1

The awscli juga dapat melakukan ini.

Pertama, dapatkan shapshot id menggunakan describe-images:

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

Kemudian deregister gambar dan hapus snapshot:

aws ec2 deregister-image --image-id ami-0123456789
aws ec2 delete-snapshot --snapshot-id snap-9876543210
kristi
sumber