Comment savoir quelle AMI Ubuntu lancer sur EC2?

30

Lorsque 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 souhaite uniquement exécuter les images officielles d'Ubuntu. Comment savoir maintenant quelle AMI est la bonne?

plus fluide
la source

Réponses:

26

Le succès d'Ubuntu en tant que plate-forme et l'engagement d'Ubuntu à actualiser les AMI signifie qu'il y a littéralement des milliers d'images sur Amazon EC2 avec "ubuntu" en leur nom. Cela, combiné à l'absence d'Ubuntu dans le menu "Démarrage rapide", fait que la sélection de la bonne AMI est une tâche non triviale.

Quelques informations générales sur Ubuntu

Vous connaissez peut-être déjà ces éléments, mais je tiens à les signaler à ceux qui débutent avec Ubuntu ou EC2.

  • Ubuntu sort 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 que tous les 2 ans une version LTS (Long Term Support) est faite. Si vous souhaitez une stabilité et un support pendant 5 ans, sélectionnez une version LTS. Si vous souhaitez les packages les plus récents, 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 une situation géographique. Chaque région a ses propres identifiants AMI. A l'intérieur de chaque région, il existe 2 architectures (x86_64, i386) et 2 types de "root store" (EBS ou instance). Cela signifie que pour chaque version d'Ubuntu, nous générons 20 identifiants d'amis.

Le plus simple: recherchez les AMI à partir de votre navigateur Web

Vous pouvez choisir votre interface pour sélectionner des images. Accédez à:

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

    Au bas de cette page, vous pouvez sélectionner la région, la version, l'arc 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 de l'ami, ou simplement cliquer dessus pour accéder directement à la page de lancement de la console EC2 pour cette AMI.

ou

  • https://cloud-images.ubuntu.com/server/releases/
    • Sélectionnez votre version par numéro ou nom de code
    • Sélectionnez 'release /': Nous conservons les versions historiques pour le débogage, mais le répertoire 'release /' sera toujours le dernier.
    • Sélectionnez votre AMI dans le tableau et cliquez pour lancer dans la console ou copier et coller une ligne de commande.

Rechercher 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 Ubuntu officielle ici, suivez les étapes ci-dessous.

  • Sélectionnez la région que vous souhaitez en haut à gauche, sous 'Navigation' Exemple: "Us East (Virginia)"
  • Cliquez sur "AMI" Ne cliquez pas sur "Lancer l'instance" [voir note ci-dessous]
  • pour «Affichage», sélectionnez «Toutes les images»
  • Limitez les résultats aux images Ubuntu Stable Release en tapant ubuntu-images /

    Vous devez élargir 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'

    Remarque : Si vous souhaitez exécuter un m1.small ou c1.medium, vous avez besoin de 'i386'. Si vous souhaitez exécuter un t1.micro, vous devrez sélectionner une image «ebs».

  • Trier vos résultats par nom AMI et faire une sélection

    En triant par nom 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 le 099720109477!

    Tout utilisateur peut enregistrer une AMI sous n'importe quel nom. Rien n'empêche un utilisateur malveillant d'enregistrer une AMI qui correspondrait à la recherche ci-dessus. Donc, 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" pour être affiché.
  • Cliquez sur le nom AMI, puis cliquez sur «Lancer»

Remarques

  • Accès HTTPS : Parmi les options ci-dessus, https://cloud-images.ubuntu.com/server/releases/ est actuellement la seule à fournir des données via https. Cela peut être important pour vous si vous êtes préoccupé par des attaques potentielles d '"homme au milieu" lors de la recherche d'un ID AMI. J'ai demandé à Ahmed [kim0 in 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 n'ai vu aucun moyen dans la boîte de dialogue «Lancer l'instance» de voir l'ID du propriétaire. Parce que si c'est le cas, je suggère de ne pas utiliser cette boîte de dialogue pour trouver des "AMI communautaires". Il n'y a tout simplement aucun moyen de savoir de manière fiable qui est le propriétaire de l'image depuis la console. Pour les utilisateurs avancés, je bloguerai très prochainement sur un moyen de trouver des AMI par programmation [Astuce].

La source

plus fluide
la source
Pourriez-vous préciser la différence entre hvm-instanceet hvm-ssd? J'ai peur que "instance" signifie "paravirtuel", mais je ne suis pas sûr et je ne trouve pas d'informations à ce sujet. En outre, il peut être utile de noter que les https://cloud-images.ubuntu.com/locator/filtres d'offre ... en bas de la page
Balmipour
11

Version nouvelle et 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

Saisit essentiellement les données brutes utilisées pour la page de recherche d'amis d'ubuntu et utilise jq pour analyser la ligne que je veux, 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 la dernière.

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 '",')

Il fonctionne en 2 parties. La première partie obtient toutes les AMI pour ubuntu trusty qui répondent aux différents critères (ebs, x86_64 et le modèle de nom). Il extrait le nom et le trie. Les noms sont formatés de façon à ce que leur tri soit trié par date afin que le dernier soit le plus récent. Ce nom est ensuite attribué à la variable «nom».

La deuxième partie utilise ce nom pour demander l'ID AMI pour l'AMI avec ce nom. Il analyse uniquement l'ID et l'assigne à 'ami_id'.

John Eikenberry
la source
Pouvez-vous expliquer ce que cela signifie?
Kaz Wolfe
Ajout de l'explication à la réponse.
John Eikenberry
4
Cela devrait accomplir quelque chose de similaire, mais en utilisant une expression de requête JMESPath:aws --region us-west-2 ec2 describe-images --owners 099720109477 --filters Name=root-device-type,Values=ebs Name=architecture,Values=x86_64 Name=name,Values='*hvm-ssd/ubuntu-trusty-14.04*' --query 'sort_by(Images, &Name)[-1].ImageId'
dnlbrky
4

en utilisant ruby ​​aws-sdk, vous pouvez découvrir par programmation la dernière 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
Tournesol
la source
2

Vous pouvez utiliser https://cloud-images.ubuntu.com/locator/ec2/ qui fournit une comparaison complète basée sur la version, la date de sortie, etc.

Recherchez la version, la région que vous souhaitez et triez en fonction de la date de sortie pour obtenir la dernière version.

Jasim Muhammed
la source
1

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 (2017-06-07) dans la région ap-sud-est-2, AWS proposera ces images Ubuntu LTS si vous démarrez une instance EC2 manuellement à partir de la console:

  • Serveur Ubuntu 16.04 LTS (HVM), type de volume SSD - ami-96666ff5
  • Serveur Ubuntu 14.04 LTS (HVM), type de volume SSD - ami-807876e3

Ceci est conforme à leurs recommandations d'utiliser la virtualisation HVM et les volumes SSD soutenus par EBS.

Pour de meilleures performances, nous vous recommandons d'utiliser les types d'instances de 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 ID AMI renvoyés par le playbook, vous pouvez voir qu'AWS ne recommande pas la dernière image disponible mais plutôt la deuxième ou la troisième plus récente. Je ne sais pas quels critères / heuristiques ils utilisent ici.

htaccess
la source