Quand je veux lancer une instance d'Ubuntu sur EC2, comment trouver la bonne? Il y a des milliers d'images publiques qui ont "Ubuntu" dans leur nom. Je ne suis intéressé que par la gestion des images officielles Ubuntu. Comment puis-je maintenant quel AMI est le bon?
Le succès d'Ubuntu en tant que plate-forme et son engagement à actualiser les AMI signifient qu'il existe littéralement des milliers d'images sur Amazon EC2 portant le nom "ubuntu". Cela, combiné à l'absence d'Ubuntu dans le menu "Démarrage rapide", fait de la sélection de la bonne AMI une tâche non triviale.
Quelques informations générales sur Ubuntu
Vous êtes peut-être déjà au courant de ces éléments, mais je tiens à les signaler à ceux qui débutent avec Ubuntu ou EC2.
Le plus simple: recherchez des AMI dans votre navigateur Web
Vous pouvez choisir votre interface pour sélectionner des images. Aller à soit:
Au bas de cette page, vous pouvez sélectionner la région, la version, Arch ou le magasin racine. Vous ne voyez ici que les versions les plus récentes. Une fois votre sélection effectuée, vous pouvez copier et coller le numéro d’AMI ou cliquer simplement sur celui-ci pour aller directement à la page de lancement de la console EC2 pour cette AMI.
ou
Recherche dans la console Amazon EC2
La console EC2 est un moyen graphique de trier les AMI et d’en sélectionner une à lancer. Pour lancer une image officielle Ubuntu ici, suivez les étapes ci-dessous.
Limitez les résultats aux images Ubuntu Stable Release en saisissant ubuntu-images /
Vous devez développer le champ 'Nom AMI' aussi largement que possible (peut-être réduire les autres).
Limitez les résultats à une version spécifique en ajoutant '. *'.
Par exemple: ubuntu-images /.* 10.04
Limitez les résultats à un arc donné en ajoutant '. * I386' ou '. * AMD64'
Note : Si vous voulez exécuter un m1.small ou un c1.medium, vous avez besoin de 'i386'. Si vous voulez exécuter un t1.micro, vous devez sélectionner une image 'ebs'.
Triez vos résultats par nom AMI et faites votre choix.
En triant par nom d'AMI, vous pouvez plus facilement voir la dernière AMI pour un ensemble donné. Chaque AMI se termine par un nombre au format AAAAMMJJ (année, mois, jour). Vous voulez le plus récent.
Vérifiez que le propriétaire est 099720109477!
Tout utilisateur peut enregistrer une AMI sous n’importe quel nom. Rien n'empêche un utilisateur malveillant d'enregistrer une AMI correspondant à la recherche ci-dessus. Par conséquent, pour être sûr, vous devez vérifier que le propriétaire de l'AMI est ' 099720109477 '.
Notes
Accès HTTPS : parmi les options ci-dessus, pour le moment https://cloud-images.ubuntu.com/server/releases/ = est le seul qui fournit des données via https. Cela peut être important pour vous si vous êtes préoccupé par les attaques potentielles "Homme au milieu" lors de la recherche d'un identifiant AMI. J'ai demandé à Ahmed [kim0 dans irc] de prendre en charge l'accès https à https://cloud.ubuntu.com/AMI .
Boîte de dialogue 'Lancer l'instance' de la console Web : Je ne voyais aucun moyen dans la boîte de dialogue 'Lancer une instance' de voir l'ID du propriétaire. Parce que si cela, je suggère de ne pas utiliser cette boîte de dialogue pour trouver des "AMI de la communauté". Il est tout simplement impossible de savoir de manière fiable qui est le propriétaire de l'image à partir de la console. Pour les utilisateurs avancés, je bloguerai bientôt sur un moyen de rechercher les AMI par programme [Astuce].
Nouvelle version améliorée.
# 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
Essentiellement, saisit les données brutes utilisées pour la page de recherche AMI d’Ubuntu et utilise jq pour analyser la ligne souhaitée puis un grep pour extraire la valeur. Beaucoup plus rapide que l'ancienne version.
-- version originale
Voici un autre exemple. Je viens d'écrire ceci pour récupérer le dernier identifiant AMI fiable. Il utilise l'outil aws cli pour interroger l'API, en utilisant le fait que les noms sont triés par date pour obtenir les plus récents.
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 '",')
Cela fonctionne en 2 parties. La première partie regroupe toutes les AMI d'ubuntu trusty qui répondent aux différents critères (ebs, x86_64 et le modèle de nom). Il sort le Nom et le trie. Les noms sont formatés de manière à pouvoir les trier par date afin que le dernier soit le plus récent. Ce nom est ensuite affecté à la variable 'name'.
La deuxième partie utilise ce nom pour demander l’ID AMI de l’AMI portant ce nom. Il analyse uniquement l'identifiant et l'assigne à 'AMI_id'.
en utilisant Ruby aws-sdk, vous pouvez découvrir par programmation la dernière version de l'AMI Ubuntu comme celle-ci
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
Vous pouvez utiliser https://cloud-images.ubuntu.com/locator/ec2/ qui fournit une comparaison complète basée sur la version, la date de publication, etc.
Recherchez la version, la région de votre choix et triez-les en fonction de la date de publication pour obtenir la dernière version.
J'ai pensé qu'il serait utile de montrer comment faire cela avec Ansible en utilisant le module ec2_AMI_find .
Au moment de la rédaction de ce document (le 07/06/2017), AWS suggère ces images Ubuntu LTS si vous démarrez manuellement une instance EC2 à partir de la console dans la région ap-sud-est-2:
Ceci est conforme à leurs recommandations pour utiliser la virtualisation HVM et les volumes SSD sauvegardés par EBS.
Pour optimiser les performances, nous vous recommandons d'utiliser les types d'instance de la génération actuelle et les AMI HVM lorsque vous lancez vos instances.
Pour obtenir les mêmes AMI recommandées par AWS, vous pouvez utiliser les tâches suivantes:
- 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 }}"
Ce qui donne la sortie suivante:
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"
}
Si vous comparez les identifiants AMI renvoyés par le livre de lecture, vous pouvez constater qu'AWS ne recommande pas la dernière image disponible, mais plutôt la deuxième ou la troisième. Je ne sais pas quels critères/heuristiques ils utilisent ici.
Il existe un liste complète des AMI officielles disponibles sur le portail cloud Ubunt . Vous trouverez des ressources supplémentaires sur les versions officielles de l’AM2 EC2 de Canonical dans Aide Ubuntu: Guide de démarrage EC2 et un répertoire brut de toutes les AMI publiées par Canonical dans buntu EC2 Images