Для полноты
другое решение, которое работает для меня, это добавить «/ usr / bin / compiz -replace» в приложения запуска GNOME через:
gnome-session-properties
[d2 ] Я тоже потерял функциональность Alt-RightClick (требуется Windows + Alt-Rightclick), но Alt + Tab все еще работает. приветствует
Я подумал, что было бы полезно продемонстрировать, как это сделать, используя 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 не рекомендует последнее доступное изображение, а второе или третье последнее. Я не знаю, какие критерии / эвристики они используют здесь.
Вы можете использовать https://cloud-images.ubuntu.com/locator/ec2/, которые обеспечивают всестороннее сравнение, основанное на версии, дате выпуска и т. д.
Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.
Новая и улучшенная версия.
# 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».
, используя 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
Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images
Я подумал, что было бы полезно продемонстрировать, как это сделать, используя 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 не рекомендует последнее доступное изображение, а второе или третье последнее. Я не знаю, какие критерии / эвристики они используют здесь.
Вы можете использовать https://cloud-images.ubuntu.com/locator/ec2/, которые обеспечивают всестороннее сравнение, основанное на версии, дате выпуска и т. д.
Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.
Новая и улучшенная версия.
# 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».
, используя 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
Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images
Я подумал, что было бы полезно продемонстрировать, как это сделать, используя 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 не рекомендует последнее доступное изображение, а второе или третье последнее. Я не знаю, какие критерии / эвристики они используют здесь.
Вы можете использовать https://cloud-images.ubuntu.com/locator/ec2/, которые обеспечивают всестороннее сравнение, основанное на версии, дате выпуска и т. д.
Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.
Новая и улучшенная версия.
# 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».
, используя 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
Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images
Я подумал, что было бы полезно продемонстрировать, как это сделать, используя 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 не рекомендует последнее доступное изображение, а второе или третье последнее. Я не знаю, какие критерии / эвристики они используют здесь.
Вы можете использовать https://cloud-images.ubuntu.com/locator/ec2/, которые обеспечивают всестороннее сравнение, основанное на версии, дате выпуска и т. д.
Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.
Новая и улучшенная версия.
# 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».
, используя 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
Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images
Я подумал, что было бы полезно продемонстрировать, как это сделать, используя 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 не рекомендует последнее доступное изображение, а второе или третье последнее. Я не знаю, какие критерии / эвристики они используют здесь.
Вы можете использовать https://cloud-images.ubuntu.com/locator/ec2/, которые обеспечивают всестороннее сравнение, основанное на версии, дате выпуска и т. д.
Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.
Новая и улучшенная версия.
# 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».
, используя 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
Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images
Я подумал, что было бы полезно продемонстрировать, как это сделать, используя 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 не рекомендует последнее доступное изображение, а второе или третье последнее. Я не знаю, какие критерии / эвристики они используют здесь.
Вы можете использовать https://cloud-images.ubuntu.com/locator/ec2/, которые обеспечивают всестороннее сравнение, основанное на версии, дате выпуска и т. д.
Найдите версию, регион, который вы хотите и сортировать по дате выпуска, чтобы получить последнюю версию.
Новая и улучшенная версия.
# 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».
, используя 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
Существует полный список доступных официальных AMI на облачном портале Ubuntu. Вы найдете дополнительные ресурсы относительно официальных релизов ECIC от Canonical EC2 в справочнике Ubuntu Help: EC2 Starts Guide и исходной директории всех AMI, выпущенных Canonical в Ubuntu EC2 Images