Як дізнатися, який Ubuntu AMI запустити на EC2?


29

Коли я хочу запустити екземпляр Ubuntu на EC2, як мені знайти потрібний? Є тисячі загальнодоступних образів, на яких у назві є "Ubuntu". Мене цікавить лише запуск офіційних образів Ubuntu. Як мені тепер зробити, який AMI є правильним?


також дивіться unix.stackexchange.com/questions/24402/…
cwd

Відповіді:


26

Успіх Ubuntu як платформи та прихильність Ubuntu до оновлення AMI означають, що на Amazon EC2 є буквально тисячі зображень, на яких є "ubuntu". Це в поєднанні з відсутністю Ubuntu в меню "Швидкий старт" робить вибір правильного AMI нетривіальним завданням.

Деякі загальні відомості про Ubuntu

Ви вже можете знати про ці елементи, але я хочу вказати на них тим, хто тільки починає працювати з Ubuntu або EC2.

  • Ubuntu випускається кожні 6 місяців. Кожен випуск має номер версії та ім'я коду. Найважливіше, що тут слід зазначити, це те, що кожні 2 роки випускається версія LTS (Long Term Support). Якщо ви хочете стабільності та підтримки протягом 5 років, виберіть випуск LTS. Якщо вам потрібні новітні пакети, виберіть останній випуск. Додаткову інформацію див. У статті wikipedia.
  • На момент написання цього запису в Amazon EC2 є 5 "регіонів". Кожен регіон представляє географічне положення. У кожному регіоні є свої ідентифікатори AMI. Всередині кожного регіону є 2 архітектури (x86_64, i386) та 2 типи «root store» (EBS або екземпляр). Це означає, що для кожного випуску Ubuntu випусків ми генеруємо 20 амі.

Найпростіше: знайти AMI у своєму веб-переглядачі

Ви можете вибрати свій інтерфейс для вибору зображень. Перейдіть до будь-якого:

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

    Внизу цієї сторінки ви можете вибрати регіон, випуск, арку або корінь-сховище. Тут показані лише найсвіжіші випуски. Після вибору ви можете скопіювати та вставити номер ami або просто натиснути на нього, щоб перейти до сторінки запуску консолі EC2 для цього AMI.

або

  • https://cloud-images.ubuntu.com/server/releases/
    • Виберіть реліз за номером або кодовим іменем
    • Виберіть 'release /': ми зберігаємо історичні складання для налагодження, але каталог 'release /' завжди буде останнім.
    • Виберіть свій AMI з таблиці та натисніть для запуску в консолі або скопіюйте та вставте командний рядок.

Шукайте через консоль Amazon EC2

Консоль EC2 - це графічний спосіб сортування AMI та вибір для запуску. Щоб запустити офіційне зображення Ubuntu тут, виконайте наведені нижче дії.

  • Виберіть потрібний регіон у верхньому лівому куті, приклад "Навігація": "Нас Схід (Вірджинія)"
  • Натисніть кнопку «МАС» Do НЕ натиснути кнопку «Launch Instance» [см примітку нижче]
  • для "Перегляду" виберіть "Усі зображення"
  • Обмежте результати на зображення 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 '.

  • Якщо "Власник" для вас не стовпець, натисніть "Показати / приховати" у верхньому правому куті та виберіть "Власник", який буде показаний.
  • Клацніть ім'я AMI, потім натисніть «Запустити»

Примітки

  • 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/пропонують фільтри ... внизу сторінки
Balmipour

11

Нова та вдосконалена версія.

# 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".


Чи можете ви поясніть, що це робить?
Каз Вулф

До відповіді додали пояснення.
Джон Ейкенберрі

4
Це має зробити щось подібне, але використовуючи вираз запиту 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

використовуючи 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

2

Ви можете використовувати https://cloud-images.ubuntu.com/locator/ec2/, які забезпечують всебічне порівняння на основі версії, дати випуску тощо.

Шукайте версію, потрібний регіон та сортуйте на основі дати випуску, щоб отримати останню версію.



1

Я вважав, що було б корисно продемонструвати, як це зробити за допомогою Ansible, використовуючи модуль ec2_ami_find .

На момент написання (2017-06-07) в регіоні ap-southeast-2 AWS запропонує ці зображення Ubuntu LTS, якщо запустити екземпляр EC2 вручну з консолі:

  • Ubuntu Server 16.04 LTS (HVM), тип гучності SSD - ami-96666ff5
  • Ubuntu Server 14.04 LTS (HVM), тип гучності SSD - ami-807876e3

Це відповідає їх рекомендаціям щодо використання віртуалізації 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 рекомендує не останнє доступне зображення, а друге або третє останнє. Я не знаю, які критерії / евристичні вони тут використовують.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.