Коли я хочу запустити екземпляр Ubuntu на EC2, як мені знайти потрібний? Є тисячі загальнодоступних образів, на яких у назві є "Ubuntu". Мене цікавить лише запуск офіційних образів Ubuntu. Як мені тепер зробити, який AMI є правильним?
Коли я хочу запустити екземпляр Ubuntu на EC2, як мені знайти потрібний? Є тисячі загальнодоступних образів, на яких у назві є "Ubuntu". Мене цікавить лише запуск офіційних образів Ubuntu. Як мені тепер зробити, який AMI є правильним?
Відповіді:
Успіх Ubuntu як платформи та прихильність Ubuntu до оновлення AMI означають, що на Amazon EC2 є буквально тисячі зображень, на яких є "ubuntu". Це в поєднанні з відсутністю Ubuntu в меню "Швидкий старт" робить вибір правильного AMI нетривіальним завданням.
Деякі загальні відомості про Ubuntu
Ви вже можете знати про ці елементи, але я хочу вказати на них тим, хто тільки починає працювати з Ubuntu або EC2.
Найпростіше: знайти AMI у своєму веб-переглядачі
Ви можете вибрати свій інтерфейс для вибору зображень. Перейдіть до будь-якого:
Внизу цієї сторінки ви можете вибрати регіон, випуск, арку або корінь-сховище. Тут показані лише найсвіжіші випуски. Після вибору ви можете скопіювати та вставити номер ami або просто натиснути на нього, щоб перейти до сторінки запуску консолі EC2 для цього AMI.
або
Шукайте через консоль Amazon EC2
Консоль EC2 - це графічний спосіб сортування AMI та вибір для запуску. Щоб запустити офіційне зображення Ubuntu тут, виконайте наведені нижче дії.
Обмежте результати на зображення Ubuntu Stable Release, набравши ubuntu-образи /
Ви повинні розширити поле "Ім'я AMI" якомога ширше (можливо, зменшити інші).
Обмежте результати конкретним випуском, додавши ". *".
Наприклад: ubuntu-images /.* 10.04
Обмежте результати в заданій арці, додавши ". * I386" або ". * Amd64"
Примітка . Якщо ви хочете запустити m1.small або c1.medium, вам знадобиться "i386". Якщо ви хочете запустити t1.micro, вам потрібно вибрати зображення 'ebs'.
Сортуйте результати за назвою AMI та зробіть вибір
Сортувавши за назвою AMI, ви можете легше побачити найновіший AMI для даного набору. Кожен AMI закінчується цифрою у форматі YYYYMMDD (рік, місяць, день). Ви хочете останню.
Перевірте, власник 099720109477!
Будь-який користувач може зареєструвати AMI під будь-яким іменем. Ніщо не заважає зловмисникові зареєструвати AMI, який би відповідав пошуку вище. Отже, щоб бути безпечним, вам потрібно переконатися, що власник ami - ' 099720109477 '.
Примітки
HTTPS Access : з наведених вище варіантів, https://cloud-images.ubuntu.com/server/releases/ є єдиним, який надає дані через https. Це може бути важливим для вас, якщо ви переймаєтесь потенційними атаками "Людина в середині" під час пошуку ідентифікатора AMI. Я попросив Ахмеда [kim0 в irc] підтримати https доступ до https://cloud.ubuntu.com/ami .
Діалогове вікно "Запуск екземпляра" веб-консолі : я не бачив способу в діалоговому вікні "Запустити екземпляр", щоб побачити ідентифікатор власника. Тому що якщо це, я пропоную не використовувати це діалогове вікно для пошуку "AMI спільноти". Просто неможливо точно дізнатися, хто власник зображення з консолі. Для просунутих користувачів я веду щоденник найближчим часом про те, щоб програмно знайти AMI [Підказка].
hvm-instance
та hvm-ssd
? Я боюся, що "екземпляр" означає "паравіртуальний", але я не впевнений і не можу знайти інформацію про нього. Крім того, може бути корисно зазначити, що https://cloud-images.ubuntu.com/locator/
пропонують фільтри ... внизу сторінки
Нова та вдосконалена версія.
# 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
В основному схоплює необроблені дані, які використовуються для пошуку сторінки ami ubuntu, і використовує jq для розбору рядка, який я хочу, а потім grep, щоб витягнути значення. Набагато швидше, ніж стара версія.
- оригінальна версія
Ось ще один приклад. Я щойно написав це, щоб отримати останній надійний ID AMI. Він використовує інструмент aws cli для запиту API, використовуючи той факт, що імена сортуються за датою, щоб отримати останню версію.
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 '",')
Він працює в 2 частинах. Перша частина отримує всі AMI для ubuntu надійних, які відповідають різним критеріям (ebs, x86_64 та шаблон імені). Він витягує Ім'я та сортує його. Імена відформатовані так, що сортування їх сортує за датою, щоб останнє було найновішим. Потім це ім'я присвоюється змінній 'name'.
Друга частина використовує це ім'я для запиту ідентифікатора AMI для AMI з цим ім'ям. Він розбирає тільки ідентифікатор і призначає його "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'
використовуючи ruby aws-sdk, ви можете програмно виявити останній подібний Ubuntu AMI
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
Ви можете використовувати https://cloud-images.ubuntu.com/locator/ec2/, які забезпечують всебічне порівняння на основі версії, дати випуску тощо.
Шукайте версію, потрібний регіон та сортуйте на основі дати випуску, щоб отримати останню версію.
На хмарному порталі Ubuntu є вичерпний перелік доступних офіційних AMI . Ви знайдете додаткові ресурси щодо офіційних випусків ECI AMI компанії Canonical у довідці Ubuntu: Посібник із запуску EC2 та невідкритий каталог всіх AMI, випущених Canonical у зображеннях Ubuntu EC2
Я вважав, що було б корисно продемонструвати, як це зробити за допомогою Ansible, використовуючи модуль ec2_ami_find .
На момент написання (2017-06-07) в регіоні ap-southeast-2 AWS запропонує ці зображення Ubuntu LTS, якщо запустити екземпляр EC2 вручну з консолі:
Це відповідає їх рекомендаціям щодо використання віртуалізації HVM та обсягів SSD, підтримуваних EBS.
Для найкращої продуктивності ми рекомендуємо використовувати під час запуску екземпляри типи екземплярів поточного покоління та HVM AMI.
Щоб отримати ті самі AMI, які рекомендує AWS, ви можете скористатися такими завданнями:
- 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 }}"
Що дає наступний вихід:
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"
}
Якщо ви порівнюєте ідентифікаційні файли AMI, повернені в програмі, ви можете побачити, що AWS рекомендує не останнє доступне зображення, а друге або третє останнє. Я не знаю, які критерії / евристичні вони тут використовують.