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?
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?
Jawaban:
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.
Paling mudah: Temukan AMI dari Browser Web Anda
Anda dapat memilih antarmuka Anda untuk memilih gambar. Pergi ke salah satu:
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
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.
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 '.
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].
hvm-instance
dan 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
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'.
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'
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
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.
Ada daftar lengkap AMI Resmi yang tersedia di Portal Cloud Ubuntu . Anda dapat menemukan sumber daya tambahan tentang rilis AMI EC2 Resmi Canonical di Bantuan Ubuntu: EC2 Starts Guide dan direktori mentah semua AMI yang dirilis oleh Canonical di Ubuntu EC2 Images
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:
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.