Bagaimana saya tahu apa yang akan diluncurkan AMI Ubuntu pada EC2?

29

Ketika saya ingin meluncurkan instance Ubuntu di EC2, bagaimana cara menemukan yang tepat? Ada ribuan gambar publik yang memiliki "Ubuntu" di namanya. Saya hanya tertarik menjalankan gambar Ubuntu Resmi. Bagaimana saya sekarang AMI mana yang benar?

tukang smoser
sumber

Jawaban:

26

Keberhasilan Ubuntu sebagai platform dan komitmen Ubuntu untuk menyegarkan AMI berarti ada ribuan gambar di Amazon EC2 dengan "ubuntu" di namanya. Itu, dikombinasikan dengan dan kurangnya Ubuntu pada menu "Quick Start" membuat memilih AMI yang tepat menjadi tugas yang tidak sepele.

Beberapa Informasi Umum Ubuntu

Anda mungkin sudah mengetahui item-item ini, tetapi saya ingin menunjukkannya kepada mereka yang baru memulai dengan Ubuntu atau EC2.

  • Ubuntu rilis setiap 6 bulan. Setiap rilis memiliki nomor versi dan nama kode. Yang paling penting untuk dicatat di sini adalah setiap 2 tahun rilis LTS (Long Term Support) dibuat. Jika Anda ingin stabilitas dan dukungan selama 5 tahun, pilih rilis LTS. Jika Anda ingin paket terbaru, pilih rilis terbaru. Lihat entri wikipedia untuk informasi lebih lanjut.
  • Pada saat penulisan ini, ada 5 "wilayah" di Amazon EC2. Setiap wilayah mewakili lokasi geografis. Setiap daerah memiliki id AMI sendiri. Di dalam setiap wilayah terdapat 2 jenis arsitektur (x86_64, i386) dan 2 jenis "root store" (EBS atau instance). Itu berarti bahwa untuk setiap rilis Ubuntu, kami menghasilkan 20 id ami.

Paling mudah: Temukan AMI dari Browser Web Anda

Anda dapat memilih antarmuka Anda untuk memilih gambar. Pergi ke salah satu:

  • http://cloud.ubuntu.com/ami

    Di bagian bawah halaman ini, Anda dapat memilih wilayah, melepaskan, melengkung atau menyimpan root. Anda hanya ditampilkan rilis terbaru di sini. Ketika Anda telah membuat pilihan, Anda dapat menyalin dan menempelkan nomor ami, atau cukup mengkliknya untuk langsung ke halaman peluncuran konsol EC2 untuk AMI itu.

atau

  • https://cloud-images.ubuntu.com/server/releases/
    • Pilih rilis Anda dengan nomor atau nama kode
    • Pilih 'rilis /': Kami menyimpan versi historis untuk debugging, tetapi direktori 'rilis /' akan selalu menjadi yang terbaru.
    • Pilih AMI Anda dari tabel dan klik untuk meluncurkan di konsol atau salin dan tempel baris perintah.

Cari melalui Konsol Amazon EC2

EC2 Console adalah cara grafis untuk menyortir AMI dan memilih satu untuk diluncurkan. Untuk Meluncurkan Gambar Ubuntu Resmi di sini, ikuti langkah-langkah di bawah ini.

  • Pilih wilayah yang Anda inginkan di kiri atas, di bawah 'Navigasi' Contoh: "Us East (Virginia)"
  • Klik "Amis" Do tidak klik "Launch Instance" [lihat catatan di bawah ini]
  • untuk 'Melihat', pilih "Semua Gambar"
  • Batasi hasilnya hanya untuk Ubuntu Stable Release images dengan mengetik ubuntu-images /

    Anda harus memperluas bidang 'Nama AMI' selebar mungkin (mungkin menyusutkan yang lain).

  • Batasi hasilnya hanya untuk rilis tertentu dengan menambahkan '. *'.

    Sebagai contoh: ubuntu-images /.* 10.04

  • Batasi hasil pada lengkungan yang diberikan dengan menambahkan '. * I386' atau '. * Amd64'

    Catatan : Jika Anda ingin menjalankan m1.small atau c1.medium, Anda memerlukan 'i386'. Jika Anda ingin menjalankan t1.micro, Anda harus memilih gambar 'ebs'.

  • Urutkan hasil Anda dengan Nama AMI dan pilih

    Dengan mengurutkan berdasarkan nama AMI, Anda dapat lebih mudah melihat AMI terbaru untuk set yang diberikan. Setiap AMI berakhir dengan angka dalam format YYYYMMDD (tahun, bulan, hari). Anda menginginkan yang terbaru.

  • Verifikasi Pemilik adalah 099720109477!

    Setiap pengguna dapat mendaftarkan AMI dengan nama apa pun. Tidak ada yang mencegah pengguna jahat mendaftarkan AMI yang cocok dengan pencarian di atas. Jadi, agar aman, Anda perlu memverifikasi bahwa pemilik ami adalah ' 099720109477 '.

  • Jika "Pemilik" bukan kolom untuk Anda, klik "Tampilkan / Sembunyikan" di kanan atas dan pilih "Pemilik" untuk ditampilkan.
  • Klik pada nama AMI, lalu Klik 'Luncurkan'

Catatan

  • Akses HTTPS : Dari opsi di atas, sekarang https://cloud-images.ubuntu.com/server/releases/ adalah satu-satunya yang menyediakan data lebih dari https. Ini mungkin penting bagi Anda jika Anda khawatir tentang potensi serangan "Man in the Middle" ketika menemukan id AMI. Saya telah meminta Ahmed [kim0 in irc] untuk mendukung akses https ke https://cloud.ubuntu.com/ami .

  • Dialog 'Luncurkan Instance' Konsol Web : Saya tidak melihat cara dalam dialog 'Luncurkan Instance' untuk melihat ID Pemilik. Karena jika ini, saya sarankan tidak menggunakan dialog itu untuk menemukan "AMI Komunitas". Sama sekali tidak mungkin Anda dapat dengan andal mengetahui siapa pemilik gambar tersebut dari dalam konsol. Untuk pengguna tingkat lanjut, saya akan membuat blog dalam waktu dekat tentang cara menemukan AMI secara terprogram [Petunjuk].

Sumber

tukang smoser
sumber
Bisakah Anda menjelaskan perbedaan antara hvm-instancedan hvm-ssd? Saya khawatir "instance" berarti "paravirtual", tetapi tidak yakin, dan tidak dapat menemukan info tentangnya. Juga, dapat bermanfaat untuk mencatat bahwa https://cloud-images.ubuntu.com/locator/menawarkan filter ... di bagian bawah halaman
Balmipour
11

Versi baru dan lebih baik.

# needed as json list returned by ubuntu site is mal-formed
remove_last_comma() { sed '
        $x;$G;/\(.*\),/!H;//!{$!d
    };  $!x;$s//\1/;s/^\n//'
}

curl -s "https://cloud-images.ubuntu.com/locator/ec2/releasesTable" \
    | remove_last_comma \
    | jq -c '.aaData[] | select(contains(["16.04", "us-west-2", "hvm:ebs"]))' \
    | grep -o 'ami-[a-z0-9]\+' | head -1

Pada dasarnya ambil data mentah yang digunakan untuk halaman pencarian ami ubuntu, dan gunakan jq untuk mengurai baris yang saya inginkan kemudian grep untuk menarik nilainya. Jauh lebih cepat dari versi lama.


-- versi asli

Ini contoh lain. Saya baru saja menulis ini untuk mengambil id AMI terpercaya terbaru. Ini menggunakan alat aws cli untuk meminta API, menggunakan fakta bahwa nama-nama mengurutkan dalam urutan tanggal untuk mendapatkan yang terbaru.

name=$(\
    aws --region us-west-2 ec2 describe-images --owners 099720109477 \
        --filters Name=root-device-type,Values=ebs \
            Name=architecture,Values=x86_64 \
            Name=name,Values='*hvm-ssd/ubuntu-trusty-14.04*' \
    | awk -F ': ' '/"Name"/ { print $2 | "sort" }' \
    | tr -d '",' | tail -1)

ami_id=$(\
    aws --region us-west-2 ec2 describe-images --owners 099720109477 \
        --filters Name=name,Values="$name" \
    | awk -F ': ' '/"ImageId"/ { print $2 }' | tr -d '",')

Ini bekerja dalam 2 bagian. Bagian pertama mendapatkan semua AMI untuk kepercayaan Ubuntu yang memenuhi berbagai kriteria (ebs, x86_64, dan pola nama). Itu mengeluarkan Nama dan mengurutkannya. Nama-nama diformat sehingga mengurutkannya berdasarkan tanggal sehingga yang terakhir akan menjadi yang terbaru. Nama ini kemudian ditugaskan ke variabel 'nama'.

Bagian kedua menggunakan nama itu untuk meminta ID AMI untuk AMI dengan nama itu. Itu mem-parsing hanya id dan menugaskannya ke 'ami_id'.

John Eikenberry
sumber
Bisakah Anda jelaskan apa fungsinya?
Kaz Wolfe
Menambahkan penjelasan pada jawabannya.
John Eikenberry
4
Ini harus mencapai sesuatu yang serupa, tetapi menggunakan ekspresi permintaan JMESPath:aws --region us-west-2 ec2 describe-images --owners 099720109477 --filters Name=root-device-type,Values=ebs Name=architecture,Values=x86_64 Name=name,Values='*hvm-ssd/ubuntu-trusty-14.04*' --query 'sort_by(Images, &Name)[-1].ImageId'
dnlbrky
4

menggunakan ruby ​​aws-sdk, Anda secara programatik dapat menemukan AMI Ubuntu terbaru seperti ini

    ec2 = AWS::EC2.new

    root_device_type = "ebs"
    ami_owner = '099720109477'
    ami_name = "*ubuntu/images/#{root_device_type}/ubuntu-precise-12.04*"  # hardcoded to ubuntu 12.04. You can apply your own criteria here.

    AWS.memoize do
      linux_ami = ec2.images.with_owner(ami_owner).
        filter("root-device-type", root_device_type).
        filter("architecture", "x86_64").        # use 'i386' for 32 bit and 'x86_64' for 64 bit
        filter("name", ami_name)
        # this only makes one request due to memoization
      begin
        return linux_ami.to_a.sort_by(&:name).last
      rescue
        abort red "Error discovering latest AMI. Terminating."
      end
    end
Lakmus
sumber
2

Anda dapat menggunakan https://cloud-images.ubuntu.com/locator/ec2/ yang menyediakan perbandingan komprehensif berdasarkan versi, tanggal rilis dll.

Cari versi, wilayah yang Anda inginkan dan urutkan berdasarkan tanggal rilis untuk mendapatkan versi terbaru.

Jasim Muhammed
sumber
1

Saya pikir akan bermanfaat untuk menunjukkan bagaimana melakukan ini dengan menggunakan Ansible dengan menggunakan ec2_ami_find modul .

Pada saat penulisan (2017-06-07) di wilayah ap-tenggara-2 AWS akan menyarankan gambar Ubuntu LTS ini jika Anda memulai instance EC2 secara manual dari konsol:

  • Ubuntu Server 16.04 LTS (HVM), Tipe Volume SSD - ami-96666ff5
  • Ubuntu Server 14.04 LTS (HVM), Tipe Volume SSD - ami-807876e3

Ini sesuai dengan rekomendasi mereka untuk menggunakan virtualisasi HVM dan Volume SSD yang didukung EBS.

Untuk kinerja terbaik, kami sarankan Anda menggunakan jenis instance generasi sekarang dan AMA HVM ketika Anda meluncurkan instance Anda.

Untuk mendapatkan AMI yang sama dengan yang disarankan AWS, Anda dapat menggunakan tugas-tugas berikut:

- name: Find the most recent xenial AMI
  ec2_ami_find:
    aws_access_key: "{{ vault_aws_access_key }}"
    aws_secret_key: "{{ vault_aws_secret_key }}"
    region: "{{ config_region }}"
    name: "ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*"
    owner: 099720109477 # canonical ownerid
    virtualization_type: hvm
    sort: name
    sort_order: descending
    sort_end: 2
  register: ami_find_xenial

- name: Newest Xenial AMI
  debug:
    msg: "{{ ami_find_xenial.results[0].ami_id }}"

- name: AWS recommend Xenial AMI
  debug:
    msg: "{{ ami_find_xenial.results[1].ami_id }}"

- name: Find the most recent trusty AMI
  ec2_ami_find:
    aws_access_key: "{{ vault_aws_access_key }}"
    aws_secret_key: "{{ vault_aws_secret_key }}"
    region: "{{ config_region }}"
    name: "ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"
    owner: 099720109477 # canonical ownerid
    virtualization_type: hvm
    architecture: x86_64
    sort: name
    sort_order: descending
    sort_end: 3
  register: ami_find_trusty

- name: Newest Trusty AMI
  debug:
    msg: "{{ ami_find_trusty.results[0].ami_id }}"

- name: AWS recommend Trusty AMI
  debug:
    msg: "{{ ami_find_trusty.results[2].ami_id }}"

Yang menghasilkan output sebagai berikut:

TASK [Load secrets from Vault] *****************************************************************************************************************************************************************************
ok: [localhost]

TASK [Find the most recent xenial AMI] *********************************************************************************************************************************************************************
ok: [localhost]

TASK [Newest Xenial AMI] ***********************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-1e01147d"
}

TASK [AWS recommended Xenial AMI] **************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-96666ff5"
}

TASK [Find the most recent trusty AMI] *********************************************************************************************************************************************************************
ok: [localhost]

TASK [Newest Trusty AMI] ***********************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-993e2bfa"
}

TASK [AWS recommended Trusty AMI] **************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-807876e3"
}

Jika Anda membandingkan id AMI yang dikembalikan oleh playbook, Anda dapat melihat AWS tidak merekomendasikan gambar terbaru yang tersedia tetapi yang kedua atau ketiga terbaru. Saya tidak tahu kriteria / heuristik apa yang mereka gunakan di sini.

htaccess
sumber