Come faccio a sapere quale Ubuntu AMI lancerà su EC2?


29

Quando voglio avviare un'istanza di Ubuntu su EC2, come trovo quella giusta? Ci sono migliaia di immagini pubbliche che hanno "Ubuntu" nel loro nome. Sono interessato solo a eseguire le immagini ufficiali di Ubuntu. Come faccio ora quale AMI è quella giusta?


Risposte:


26

Il successo di Ubuntu come piattaforma e l'impegno di Ubuntu nel rinnovare le AMI significa che ci sono letteralmente migliaia di immagini su Amazon EC2 con "ubuntu" nel loro nome. Ciò, combinato con la mancanza di Ubuntu nel menu "Avvio rapido", rende la scelta dell'AMI giusta un compito non banale.

Alcune informazioni generali su Ubuntu

Potresti già essere a conoscenza di questi elementi, ma voglio segnalarli a coloro che stanno appena iniziando con Ubuntu o EC2.

  • Ubuntu rilascia ogni 6 mesi. Ogni versione ha un numero di versione e un nome in codice. La cosa più importante da notare qui è che ogni 2 anni viene rilasciata una versione LTS (supporto a lungo termine). Se si desidera stabilità e supporto per 5 anni, selezionare una versione LTS. Se si desidera i pacchetti più recenti, selezionare la versione più recente. Vedere la voce di Wikipedia per ulteriori informazioni.
  • Al momento della stesura di questo articolo, ci sono 5 "regioni" in Amazon EC2. Ogni regione rappresenta una posizione geografica. Ogni regione ha i propri ID AMI. All'interno di ciascuna regione sono presenti 2 architetture (x86_64, i386) e 2 tipi di "archivio radice" (EBS o istanza). Ciò significa che per ogni versione di Ubuntu build, generiamo 20 identificativi.

Più semplice: trova AMI dal tuo browser Web

Puoi scegliere la tua interfaccia per selezionare le immagini. Vai a:

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

    Nella parte inferiore di questa pagina è possibile selezionare la regione, il rilascio, l'arco o il root-store. Qui vengono mostrate solo le versioni più recenti. Dopo aver effettuato la selezione, è possibile copiare e incollare il numero Ami o fare semplicemente clic su di esso per andare direttamente alla pagina di avvio della console EC2 per tale AMI.

o

  • https://cloud-images.ubuntu.com/server/releases/
    • Seleziona la tua liberatoria per numero o nome-codice
    • Seleziona 'release /': manteniamo le build storiche per il debug, ma la directory 'release /' sarà sempre l'ultima.
    • Seleziona la tua AMI dalla tabella e fai clic per avviare nella console o copiare e incollare una riga di comando.

Cerca attraverso la console Amazon EC2

La console EC2 è un modo grafico per ordinare tra le AMI e selezionarne una da avviare. Per avviare un'immagine ufficiale di Ubuntu qui, seguire i passaggi seguenti.

  • Seleziona la regione desiderata in alto a sinistra, in "Navigazione" Esempio: "Us East (Virginia)"
  • Fare clic su "amis" Do non cliccare su "Launch Instance" [vedi nota sotto]
  • per "Visualizzazione", seleziona "Tutte le immagini"
  • Limitare i risultati alle immagini Ubuntu Stable Release digitando ubuntu-images /

    È necessario espandere il campo "Nome AMI" il più possibile (magari ridurre gli altri).

  • Limitare i risultati a una versione specifica aggiungendo '. *'.

    Ad esempio: ubuntu-images /.* 10.04

  • Limitare i risultati a un determinato arco aggiungendo '. * I386' o '. * Amd64'

    Nota : se si desidera eseguire un m1.small o c1.medium, è necessario 'i386'. Se vuoi eseguire un t1.micro, dovrai selezionare un'immagine 'ebs'.

  • Ordina i risultati per nome AMI ed effettua la selezione

    Ordinando per nome AMI, è possibile visualizzare più facilmente l'AMI più recente per un determinato set. Ogni AMI termina con un numero nel formato AAAAMMGG (anno, mese, giorno). Vuoi quello più recente.

  • Verifica che il proprietario sia 099720109477!

    Qualsiasi utente può registrare un AMI con qualsiasi nome. Nulla impedisce a un utente malintenzionato di registrare un AMI che corrisponderebbe alla ricerca sopra. Quindi, per essere sicuro, devi verificare che il proprietario dell'ami sia ' 099720109477 '.

  • Se "Proprietario" non è una colonna per te, fai clic su "Mostra / Nascondi" in alto a destra e seleziona "Proprietario" per essere mostrato.
  • Fai clic sul nome AMI, quindi fai clic su "Avvia"

Gli appunti

  • Accesso HTTPS : delle opzioni sopra, in questo momento https://cloud-images.ubuntu.com/server/releases/ è l'unico che fornisce dati su https. Questo può essere importante per te se sei preoccupato per potenziali attacchi "Man in the Middle" quando trovi un ID AMI. Ho richiesto ad Ahmed [kim0 in irc] di supportare l'accesso https a https://cloud.ubuntu.com/ami .

  • Finestra di dialogo "Avvia istanza" della console Web : nella finestra di dialogo "Avvia istanza" non è stato possibile visualizzare l'ID proprietario. Perché in questo caso, suggerisco di non utilizzare quella finestra di dialogo per trovare "AMIs della community". Semplicemente, non è possibile sapere in modo affidabile chi sia il proprietario dell'immagine all'interno della console. Per gli utenti esperti, presto scriverò un blog su un modo per trovare le AMI a livello di codice [Suggerimento].

fonte


Potresti precisare la differenza tra hvm-instancee hvm-ssd? Temo che "esempio" significhi "paravirtuale", ma non sono sicuro e non riesco a trovare informazioni al riguardo. Inoltre, può essere utile notare che https://cloud-images.ubuntu.com/locator/offrono filtri ... in fondo alla pagina
Balmipour

11

Versione nuova e migliorata.

# 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

Praticamente prende i dati grezzi usati per la pagina di ricerca di Ubuntu e usa jq per analizzare la riga che voglio quindi un grep per estrarre il valore. Molto più veloce della vecchia versione.


-- versione originale

Ecco un altro esempio. Ho appena scritto questo per recuperare l'ultimo fidato ID AMI. Utilizza lo strumento aws cli per interrogare l'API, usando il fatto che i nomi si ordinano in ordine di data per ottenere l'ultimo.

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

Funziona in 2 parti. La prima parte ottiene tutte le AMI per Ubuntu fidate che soddisfano i vari criteri (ebs, x86_64 e lo schema dei nomi). Estrae il Nome e lo ordina. I nomi sono formattati in modo tale da ordinarli in base alla data, quindi l'ultimo sarà il più recente. Questo nome viene quindi assegnato alla variabile 'name'.

La seconda parte utilizza quel nome per richiedere l'ID AMI per l'AMI con quel nome. Analizza solo l'id e lo assegna a 'ami_id'.


Puoi spiegare cosa fa questo?
Kaz Wolfe,

Aggiunta la spiegazione alla risposta.
John Eikenberry,

4
Ciò dovrebbe realizzare qualcosa di simile, ma usando un'espressione di query 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

usando ruby ​​aws-sdk, puoi scoprire programmaticamente l'ultima AMI di Ubuntu in questo modo

    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



1

Ho pensato che sarebbe stato utile dimostrare come farlo usando Ansible usando il modulo ec2_ami_find .

Al momento in cui scrivo (2017-06-07) nella regione ap-sud-est-2 AWS suggerirà queste immagini Ubuntu LTS se avvii manualmente un'istanza EC2 dalla console:

  • Ubuntu Server 16.04 LTS (HVM), Tipo di volume SSD - ami-96666ff5
  • Ubuntu Server 14.04 LTS (HVM), Tipo di volume SSD - ami-807876e3

Ciò è in linea con i loro consigli per l'utilizzo della virtualizzazione HVM e dei volumi SSD supportati da EBS.

Per prestazioni ottimali, si consiglia di utilizzare i tipi di istanza di generazione corrente e le AMI HVM all'avvio delle istanze.

Per ottenere le stesse AMI consigliate da AWS, puoi utilizzare le seguenti attività:

- 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 }}"

Che dà il seguente risultato:

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"
}

Se confronti gli ID AMI restituiti dal playbook puoi vedere che AWS non consiglia l'ultima immagine disponibile ma piuttosto la seconda o la terza più recente. Non so quali criteri / euristici stanno usando qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.