Как узнать, что Ubuntu AMI запускает на EC2?

Для полноты

другое решение, которое работает для меня, это добавить «/ usr / bin / compiz -replace» в приложения запуска GNOME через:

gnome-session-properties
[d2 ] Я тоже потерял функциональность Alt-RightClick (требуется Windows + Alt-Rightclick), но Alt + Tab все еще работает.

приветствует

26
задан 18 July 2011 в 19:41

35 ответов

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

На момент написания (2017-06-07) в ap-юго-востоке-2 регион AWS предложит эти изображения Ubuntu LTS, если вы запускаете экземпляр EC2 вручную с консоли:

Сервер Ubuntu 16.04 LTS (HVM), тип тома SSD - ami-96666ff5 Сервер Ubuntu 14.04 LTS (HVM), SSD Тип тома - ami-807876e3

Это соответствует ec2_ami_find для использования виртуализации HVM и поддерживаемых EBS томов SSD.

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

1
ответ дан 25 July 2018 в 21:34

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

Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.

1
ответ дан 25 July 2018 в 21:34

Новая и улучшенная версия.

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

11
ответ дан 25 July 2018 в 21:34
  • 1
    Не могли бы вы объяснить, что это делает? – Kaz Wolfe 8 October 2014 в 13:03
  • 2
    Добавлено объяснение ответа. – John Eikenberry 23 December 2014 в 09:23
  • 3
    Это должно выполнить нечто подобное, но с использованием выражения запроса 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 19 April 2015 в 22:00

, используя 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
4
ответ дан 25 July 2018 в 21:34

Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images

0
ответ дан 25 July 2018 в 21:34
  • 1
    Не могли бы вы уточнить разницу между hvm-instance и hvm-ssd? Боюсь, что «экземпляр» означает «paravirtual», но не уверен, и не может найти информацию об этом. Кроме того, может быть полезно отметить, что https://cloud-images.ubuntu.com/locator/ предлагают фильтры ... внизу страницы – Balmipour 28 September 2016 в 20:16

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

На момент написания (2017-06-07) в ap-юго-востоке-2 регион AWS предложит эти изображения Ubuntu LTS, если вы запускаете экземпляр EC2 вручную с консоли:

Сервер Ubuntu 16.04 LTS (HVM), тип тома SSD - ami-96666ff5 Сервер Ubuntu 14.04 LTS (HVM), SSD Тип тома - ami-807876e3

Это соответствует ec2_ami_find для использования виртуализации HVM и поддерживаемых EBS томов SSD.

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

1
ответ дан 31 July 2018 в 10:33

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

Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.

1
ответ дан 31 July 2018 в 10:33

Новая и улучшенная версия.

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

11
ответ дан 31 July 2018 в 10:33
  • 1
    Не могли бы вы объяснить, что это делает? – Kaz Wolfe 8 October 2014 в 13:03
  • 2
    Добавлено объяснение ответа. – John Eikenberry 23 December 2014 в 09:23
  • 3
    Это должно выполнить нечто подобное, но с использованием выражения запроса 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 19 April 2015 в 22:00

, используя 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
4
ответ дан 31 July 2018 в 10:33

Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images

20
ответ дан 31 July 2018 в 10:33
  • 1
    Не могли бы вы уточнить разницу между hvm-instance и hvm-ssd? Боюсь, что «экземпляр» означает «paravirtual», но не уверен, и не может найти информацию об этом. Кроме того, может быть полезно отметить, что https://cloud-images.ubuntu.com/locator/ предлагают фильтры ... внизу страницы – Balmipour 28 September 2016 в 20:16

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

На момент написания (2017-06-07) в ap-юго-востоке-2 регион AWS предложит эти изображения Ubuntu LTS, если вы запускаете экземпляр EC2 вручную с консоли:

Сервер Ubuntu 16.04 LTS (HVM), тип тома SSD - ami-96666ff5 Сервер Ubuntu 14.04 LTS (HVM), SSD Тип тома - ami-807876e3

Это соответствует ec2_ami_find для использования виртуализации HVM и поддерживаемых EBS томов SSD.

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

1
ответ дан 31 July 2018 в 11:35

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

Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.

1
ответ дан 31 July 2018 в 11:35

Новая и улучшенная версия.

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

11
ответ дан 31 July 2018 в 11:35
  • 1
    Не могли бы вы объяснить, что это делает? – Kaz Wolfe 8 October 2014 в 13:03
  • 2
    Добавлено объяснение ответа. – John Eikenberry 23 December 2014 в 09:23
  • 3
    Это должно выполнить нечто подобное, но с использованием выражения запроса 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 19 April 2015 в 22:00

, используя 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
4
ответ дан 31 July 2018 в 11:35

Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images

20
ответ дан 31 July 2018 в 11:35
  • 1
    Не могли бы вы уточнить разницу между hvm-instance и hvm-ssd? Боюсь, что «экземпляр» означает «paravirtual», но не уверен, и не может найти информацию об этом. Кроме того, может быть полезно отметить, что https://cloud-images.ubuntu.com/locator/ предлагают фильтры ... внизу страницы – Balmipour 28 September 2016 в 20:16

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

На момент написания (2017-06-07) в ap-юго-востоке-2 регион AWS предложит эти изображения Ubuntu LTS, если вы запускаете экземпляр EC2 вручную с консоли:

Сервер Ubuntu 16.04 LTS (HVM), тип тома SSD - ami-96666ff5 Сервер Ubuntu 14.04 LTS (HVM), SSD Тип тома - ami-807876e3

Это соответствует ec2_ami_find для использования виртуализации HVM и поддерживаемых EBS томов SSD.

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

1
ответ дан 2 August 2018 в 03:11

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

Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.

1
ответ дан 2 August 2018 в 03: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».

11
ответ дан 2 August 2018 в 03:11
  • 1
    Не могли бы вы объяснить, что это делает? – Kaz Wolfe 8 October 2014 в 13:03
  • 2
    Добавлено объяснение ответа. – John Eikenberry 23 December 2014 в 09:23
  • 3
    Это должно выполнить нечто подобное, но с использованием выражения запроса 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 19 April 2015 в 22:00

, используя 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
4
ответ дан 2 August 2018 в 03:11

Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images

20
ответ дан 2 August 2018 в 03:11
  • 1
    Не могли бы вы уточнить разницу между hvm-instance и hvm-ssd? Боюсь, что «экземпляр» означает «paravirtual», но не уверен, и не может найти информацию об этом. Кроме того, может быть полезно отметить, что https://cloud-images.ubuntu.com/locator/ предлагают фильтры ... внизу страницы – Balmipour 28 September 2016 в 20:16

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

На момент написания (2017-06-07) в ap-юго-востоке-2 регион AWS предложит эти изображения Ubuntu LTS, если вы запускаете экземпляр EC2 вручную с консоли:

Сервер Ubuntu 16.04 LTS (HVM), тип тома SSD - ami-96666ff5 Сервер Ubuntu 14.04 LTS (HVM), SSD Тип тома - ami-807876e3

Это соответствует ec2_ami_find для использования виртуализации HVM и поддерживаемых EBS томов SSD.

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

1
ответ дан 4 August 2018 в 19:04

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

Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.

1
ответ дан 4 August 2018 в 19:04

Новая и улучшенная версия.

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

11
ответ дан 4 August 2018 в 19:04
  • 1
    Не могли бы вы объяснить, что это делает? – Kaz Wolfe 8 October 2014 в 13:03
  • 2
    Добавлено объяснение ответа. – John Eikenberry 23 December 2014 в 09:23
  • 3
    Это должно выполнить нечто подобное, но с использованием выражения запроса 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 19 April 2015 в 22:00

, используя 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
4
ответ дан 4 August 2018 в 19:04

Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images

20
ответ дан 4 August 2018 в 19:04
  • 1
    Не могли бы вы уточнить разницу между hvm-instance и hvm-ssd? Боюсь, что «экземпляр» означает «paravirtual», но не уверен, и не может найти информацию об этом. Кроме того, может быть полезно отметить, что https://cloud-images.ubuntu.com/locator/ предлагают фильтры ... внизу страницы – Balmipour 28 September 2016 в 20:16

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

На момент написания (2017-06-07) в ap-юго-востоке-2 регион AWS предложит эти изображения Ubuntu LTS, если вы запускаете экземпляр EC2 вручную с консоли:

Сервер Ubuntu 16.04 LTS (HVM), тип тома SSD - ami-96666ff5 Сервер Ubuntu 14.04 LTS (HVM), SSD Тип тома - ami-807876e3

Это соответствует ec2_ami_find для использования виртуализации HVM и поддерживаемых EBS томов SSD.

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

1
ответ дан 6 August 2018 в 03:23

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

Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.

1
ответ дан 6 August 2018 в 03:23

Новая и улучшенная версия.

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

11
ответ дан 6 August 2018 в 03:23
  • 1
    Не могли бы вы объяснить, что это делает? – Kaz Wolfe 8 October 2014 в 13:03
  • 2
    Добавлено объяснение ответа. – John Eikenberry 23 December 2014 в 09:23
  • 3
    Это должно выполнить нечто подобное, но с использованием выражения запроса 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 19 April 2015 в 22:00

, используя 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
4
ответ дан 6 August 2018 в 03:23

Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images

20
ответ дан 6 August 2018 в 03:23
  • 1
    Не могли бы вы уточнить разницу между hvm-instance и hvm-ssd? Боюсь, что «экземпляр» означает «paravirtual», но не уверен, и не может найти информацию об этом. Кроме того, может быть полезно отметить, что https://cloud-images.ubuntu.com/locator/ предлагают фильтры ... внизу страницы – Balmipour 28 September 2016 в 20:16

Другие вопросы по тегам:

Похожие вопросы: