web-dev-qa-db-fra.com

Comment savoir quelle AMI Ubuntu lancer sur EC2?

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?

28
smoser

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.

  • Ubuntu est publié tous les 6 mois. Chaque version a un numéro de version et un nom de code. La chose la plus importante à noter ici est qu’une version LTS (support à long terme) est créée tous les 2 ans. Si vous souhaitez une stabilité et une assistance pendant 5 ans, sélectionnez une version LTS. Si vous voulez les derniers packages, sélectionnez la version la plus récente. Voir l'entrée Wikipedia pour plus d'informations.
  • Au moment d'écrire ces lignes, il existe 5 "régions" dans Amazon EC2. Chaque région représente un lieu géographique. Chaque région a ses propres identifiants AMI. À l'intérieur de chaque région, il y a 2 architectures (x86_64, i386) et 2 types de "magasin racine" (EBS ou instance). Cela signifie que pour chaque version de build Ubuntu, nous générons 20 identifiants AMI.

Le plus simple: recherchez des AMI dans votre navigateur Web

Vous pouvez choisir votre interface pour sélectionner des images. Aller à soit:

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

    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

  • https://cloud-images.ubuntu.com/server/releases/
    • Sélectionnez votre communiqué par numéro ou nom de code
    • Sélectionnez 'release /': nous conservons des versions historiques pour le débogage, mais le répertoire 'release /' sera toujours le plus récent.
    • Sélectionnez votre AMI dans le tableau et cliquez pour démarrer dans la console ou copiez et collez une ligne de commande.

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.

  • Sélectionnez la région que vous voulez en haut à gauche, sous "Navigation" Exemple: "Us East (Virginia)"
  • Cliquez sur "AMI". Ne pas cliquez sur "Lancer l'instance" [voir la remarque ci-dessous]
  • pour 'Visualisation', sélectionnez "Toutes les images"
  • 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 '.

  • Si "Propriétaire" n'est pas une colonne pour vous, cliquez sur "Afficher/Masquer" en haut à droite et sélectionnez "Propriétaire" à afficher.
  • Cliquez sur le nom de l'AMI, puis sur "Lancer".

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].

Source

25
smoser

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'.

11
John Eikenberry

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
4
Litmus

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.

2
Jasim Muhammed

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:

  • Ubuntu Server 16.04 LTS (HVM), Type de volume SSD - AMI-96666ff5
  • Ubuntu Server 14.04 LTS (HVM), type de volume SSD - AMI-807876e3

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.

1
htaccess

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

1
Marco Ceppi