Откуда я знаю, что Ubuntu AMI запустить на EC2?

30

Когда я хочу запустить экземпляр Ubuntu на EC2, как мне найти подходящий? Существуют тысячи общедоступных изображений с именем Ubuntu. Я заинтересован только в запуске официальных образов Ubuntu. Как мне узнать, какой AMI является правильным?

smoser
источник

Ответы:

26

Успех Ubuntu в качестве платформы и приверженность Ubuntu обновлению AMI означает, что в Amazon EC2 буквально тысячи изображений с именем «ubuntu». Это в сочетании с отсутствием Ubuntu в меню «Быстрый старт» делает выбор правильного AMI нетривиальной задачей.

Некоторая общая информация об Ubuntu

Возможно, вы уже знаете об этих вещах, но я хочу указать на них тем, кто только начинает работать с Ubuntu или EC2.

  • Ubuntu выпускается каждые 6 месяцев. Каждый выпуск имеет номер версии и кодовое имя. Здесь важно отметить, что каждые 2 года выпускается LTS (Long Term Support). Если вам нужна стабильность и поддержка в течение 5 лет, выберите версию LTS. Если вы хотите самые новые пакеты, выберите самый последний выпуск. Смотрите запись в Википедии для получения дополнительной информации.
  • На момент написания этой статьи в Amazon EC2 было 5 «регионов». Каждый регион представляет собой географическое положение. Каждый регион имеет свои идентификаторы AMI. Внутри каждого региона есть 2 архитектуры (x86_64, i386) и 2 типа «корневого хранилища» (EBS или экземпляр). Это означает, что для каждой сборки Ubuntu мы генерируем 20 амид.

Самый простой: найти AMI из вашего веб-браузера

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

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

    Внизу этой страницы вы можете выбрать регион, релиз, архив или root-store. Здесь показаны только самые последние выпуски. Сделав свой выбор, вы можете скопировать и вставить номер ami или просто щелкнуть по нему, чтобы перейти прямо на страницу запуска консоли EC2 для этого AMI.

или

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

Поиск через консоль Amazon EC2

Консоль EC2 - это графический способ сортировки AMI и выбора одного из них для запуска. Чтобы запустить официальный образ Ubuntu здесь, выполните следующие действия.

  • Выберите регион, который вы хотите в левом верхнем углу, под «Навигация» Пример: «Us East (Вирджиния)»
  • Нажмите кнопку «МАСС» Do не нажать кнопку «Launch Instance» [см примечание ниже]
  • для «просмотра» выберите «Все изображения»
  • Ограничьте результаты Ubuntu Stable Release изображениями, набрав ubuntu-images /

    Вы должны расширить поле «Имя AMI» как можно шире (возможно, уменьшите остальные).

  • Ограничьте результаты определенным выпуском, добавив «. *».

    Например: ubuntu-images /.* 10.04

  • Ограничьте результаты данной аркой, добавив '. * I386' или '. * Amd64'

    Примечание : если вы хотите запустить m1.small или c1.medium, вам нужен 'i386'. Если вы хотите запустить t1.micro, вам нужно выбрать образ 'ebs'.

  • Сортировать результаты по имени AMI и сделать выбор

    Сортируя по имени AMI, вы можете легче увидеть новейший AMI для данного набора. Каждый AMI заканчивается номером в формате ГГГГММДД (год, месяц, день). Вы хотите самый последний.

  • Убедитесь, что владельцем является 099720109477!

    Любой пользователь может зарегистрировать AMI под любым именем. Ничто не мешает злоумышленнику зарегистрировать AMI, который соответствует поисковому запросу выше. Итак, чтобы быть в безопасности, вам нужно убедиться, что владельцем ami является « 099720109477 ».

  • Если «Владелец» не является для вас столбцом, нажмите «Показать / Скрыть» в правом верхнем углу и выберите «Владелец» для отображения.
  • Нажмите на имя AMI, затем нажмите «Запустить»

Заметки

  • HTTPS-доступ : из перечисленных выше вариантов прямо сейчас https://cloud-images.ubuntu.com/server/releases/ является единственным, который предоставляет данные через https. Это может быть важно для вас, если вы обеспокоены потенциальными атаками «Человек посередине» при поиске идентификатора AMI. Я попросил Ахмеда [kim0 in irc] поддержать https доступ к https://cloud.ubuntu.com/ami .

  • Диалоговое окно «Запуск экземпляра» веб-консоли : в диалоговом окне «Запуск экземпляра» я не видел способа увидеть идентификатор владельца. Потому что, если это так, я предлагаю не использовать этот диалог, чтобы найти «AMI сообщества». Просто нет способа узнать, кто является владельцем изображения из консоли. Для продвинутых пользователей я скоро напишу в блоге о программном поиске AMI [Подсказка].

Источник

smoser
источник
Не могли бы вы уточнить разницу между 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 для извлечения значения. Гораздо быстрее, чем старая версия.


-- оригинальная версия

Вот еще один пример. Я только что написал это, чтобы получить последний верный идентификатор 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 Trusty, которые соответствуют различным критериям (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.

Для достижения максимальной производительности мы рекомендуем использовать типы экземпляров текущего поколения и AMI HVM при запуске экземпляров.

Чтобы получить те же 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, возвращенные в playbook, вы увидите, что AWS рекомендует не последний доступный образ, а второй или третий последний. Я не знаю, какие критерии / эвристики они используют здесь.

Htaccess
источник