Woher weiß ich, welches Ubuntu AMI auf EC2 gestartet werden soll?

29

Wie finde ich die richtige Instanz, wenn ich eine Ubuntu-Instanz auf EC2 starten möchte? Es gibt Tausende von öffentlichen Bildern, deren Name "Ubuntu" enthält. Ich bin nur daran interessiert, die offiziellen Ubuntu-Images auszuführen. Wie mache ich jetzt welche AMI die richtige?

smoser
quelle

Antworten:

26

Der Erfolg von Ubuntu als Plattform und das Engagement von Ubuntu bei der Aktualisierung von AMIs bedeuten, dass auf Amazon EC2 buchstäblich Tausende von Bildern mit "Ubuntu" im Namen vorhanden sind. In Verbindung mit und dem Fehlen von Ubuntu im "Schnellstart" -Menü ist die Auswahl des richtigen AMI eine nicht triviale Aufgabe.

Einige allgemeine Ubuntu-Informationen

Möglicherweise sind Ihnen diese Punkte bereits bekannt, aber ich möchte Sie auf diejenigen hinweisen, die gerade erst mit Ubuntu oder EC2 beginnen.

  • Ubuntu erscheint alle 6 Monate. Jede Version hat eine Versionsnummer und einen Codenamen. Das Wichtigste dabei ist, dass alle 2 Jahre ein LTS-Release (Long Term Support) veröffentlicht wird. Wenn Sie 5 Jahre lang Stabilität und Unterstützung wünschen, wählen Sie eine LTS-Version. Wenn Sie die neuesten Pakete möchten, wählen Sie die neueste Version aus. Weitere Informationen finden Sie im Wikipedia-Eintrag.
  • Zum Zeitpunkt dieses Schreibens gibt es in Amazon EC2 5 "Regionen". Jede Region repräsentiert einen geografischen Ort. Jede Region hat ihre eigenen AMI-IDs. Innerhalb jeder Region gibt es 2 Architekturen (x86_64, i386) und 2 "Root Store" -Typen (EBS oder Instanz). Das bedeutet, dass wir für jedes Build-Ubuntu-Release 20 ami-IDs generieren.

Am einfachsten: Finden Sie AMIs in Ihrem Webbrowser

Sie können Ihre Schnittstelle für die Auswahl von Bildern auswählen. Gehe entweder zu:

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

    Am Ende dieser Seite können Sie die Region, das Release, den Arch oder den Root-Store auswählen. Hier werden nur die neuesten Versionen angezeigt. Wenn Sie Ihre Auswahl getroffen haben, können Sie die AMI-Nummer kopieren und einfügen oder einfach darauf klicken, um zur Startseite der EC2-Konsole für diese AMI zu gelangen.

oder

  • https://cloud-images.ubuntu.com/server/releases/
    • Wählen Sie Ihre Freigabe anhand der Nummer oder des Codenamens aus
    • Wählen Sie 'release /': Wir behalten historische Builds für das Debuggen bei, aber das Verzeichnis 'release /' ist immer das neueste.
    • Wählen Sie Ihren AMI aus der Tabelle aus und klicken Sie, um ihn in der Konsole zu starten, oder kopieren Sie eine Befehlszeile und fügen Sie sie ein.

Durchsuchen Sie die Amazon EC2-Konsole

Die EC2-Konsole ist eine grafische Möglichkeit, AMIs zu sortieren und eine zum Starten auszuwählen. Um hier ein offizielles Ubuntu-Image zu starten, gehen Sie wie folgt vor.

  • Wählen Sie oben links unter "Navigation" die gewünschte Region aus. Beispiel: "Us East (Virginia)"
  • Klicken Sie auf "AMIs". Klicken Sie nicht auf "Launch Instance".
  • für 'Viewing' wählen Sie "All Images"
  • Schränken Sie die Ergebnisse auf Ubuntu Stable Release-Bilder ein, indem Sie ubuntu-images / eingeben.

    Sie sollten das Feld "AMI-Name" so weit wie möglich erweitern (möglicherweise die anderen verkleinern).

  • Begrenzen Sie die Ergebnisse auf eine bestimmte Version, indem Sie '. *' Anhängen.

    Zum Beispiel: ubuntu-images /.* 10.04

  • Begrenzen Sie die Ergebnisse auf einen bestimmten Bogen, indem Sie '. * I386' oder '. * Amd64' anhängen.

    Hinweis : Wenn Sie m1.small oder c1.medium ausführen möchten, benötigen Sie 'i386'. Wenn Sie ein t1.micro ausführen möchten, müssen Sie ein 'ebs'-Image auswählen.

  • Sortieren Sie Ihre Ergebnisse nach AMI Name und treffen Sie eine Auswahl

    Indem Sie nach AMI-Namen sortieren, können Sie den neuesten AMI für einen bestimmten Satz einfacher anzeigen. Jedes AMI endet mit einer Zahl im Format JJJJMMTT (Jahr, Monat, Tag). Sie möchten den neuesten.

  • Stellen Sie sicher, dass der Eigentümer 099720109477 ist!

    Jeder Benutzer kann ein AMI unter einem beliebigen Namen registrieren. Nichts hindert einen böswilligen Benutzer daran, ein AMI zu registrieren, das der obigen Suche entspricht. Um sicher zu gehen, müssen Sie sicherstellen, dass der Besitzer des Amis " 099720109477 " ist.

  • Wenn "Eigentümer" für Sie keine Spalte ist, klicken Sie oben rechts auf "Einblenden / Ausblenden" und wählen Sie "Eigentümer" aus, um angezeigt zu werden.
  • Klicken Sie auf den AMI-Namen und dann auf "Starten".

Anmerkungen

  • HTTPS-Zugriff : Von den oben genannten Optionen ist derzeit https://cloud-images.ubuntu.com/server/releases/ die einzige, die Daten über https bereitstellt. Dies kann für Sie wichtig sein, wenn Sie sich Sorgen über mögliche "Man in the Middle" -Angriffe machen, wenn Sie eine AMI-ID finden. Ich habe Ahmed [kim0 in irc] gebeten, den https-Zugriff auf https://cloud.ubuntu.com/ami zu unterstützen .

  • Dialogfeld "Instanz starten" der Webkonsole : Im Dialogfeld "Instanz starten" konnte ich die Besitzer-ID nicht erkennen. In diesem Fall empfehle ich, diesen Dialog nicht zu verwenden, um "Community-AMIs" zu finden. In der Konsole können Sie einfach nicht zuverlässig erkennen, wer der Eigentümer des Images ist. Für fortgeschrittene Benutzer werde ich in Kürze einen Blog erstellen, um programmgesteuert nach AMIs zu suchen [Hinweis].

Quelle

smoser
quelle
Könnten Sie bitte den Unterschied zwischen hvm-instanceund präzisieren hvm-ssd? Ich fürchte, "Instanz" bedeutet "paravirtuell", bin mir aber nicht sicher und kann keine Informationen darüber finden. Es kann auch nützlich sein, zu beachten, dass https://cloud-images.ubuntu.com/locator/Angebotsfilter ... am Ende der Seite
Balmipour
11

Neue und verbesserte Version.

# 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

Grundsätzlich werden Rohdaten für Ubuntus Ami-Findingseite erfasst und mit jq die Zeile analysiert, die ich verwenden möchte. Anschließend wird der Wert mit einem Grep-Befehl abgerufen. Viel schneller als die alte Version.


-- Originalfassung

Hier ist ein weiteres Beispiel. Ich habe dies gerade geschrieben, um die neueste vertrauenswürdige AMI-ID abzurufen. Es verwendet das Tool aws cli, um die API abzufragen, wobei die Namen nach Datum sortiert werden, um die neuesten zu erhalten.

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

Es funktioniert in 2 Teilen. Im ersten Teil werden alle AMIs für Ubuntu Trusty abgerufen, die die verschiedenen Kriterien erfüllen (ebs, x86_64 und das Namensmuster). Es holt den Namen heraus und sortiert danach. Die Namen sind so formatiert, dass sie nach Datum sortiert werden, sodass der letzte Name der neueste ist. Dieser Name wird dann der Variablen 'name' zugewiesen.

Der zweite Teil verwendet diesen Namen, um die AMI-ID für das AMI mit diesem Namen anzufordern. Es analysiert nur die ID und weist sie 'ami_id' zu.

John Eikenberry
quelle
Können Sie mir bitte erklären, was dies bewirkt?
Kaz Wolfe
Die Erklärung zur Antwort hinzugefügt.
John Eikenberry
4
Dies sollte etwas Ähnliches bewirken, aber einen JMESPath-Abfrageausdruck verwenden: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

Mit ruby ​​aws-sdk können Sie das neueste Ubuntu AMI wie dieses programmatisch entdecken

    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
Lackmus
quelle
2

Sie können https://cloud-images.ubuntu.com/locator/ec2/ verwenden , um einen umfassenden Vergleich basierend auf Version, Veröffentlichungsdatum usw. zu ermöglichen.

Suchen Sie nach der gewünschten Version, Region und sortieren Sie sie nach dem Veröffentlichungsdatum, um die neueste Version zu erhalten.

Jasim Muhammed
quelle
1

Ich dachte, es wäre nützlich zu demonstrieren, wie dies mit Ansible mithilfe des ec2_ami_find- Moduls gemacht wird.

Zum Zeitpunkt des Schreibens (2017-06-07) in der Region Ap-Southeast-2 schlägt AWS diese Ubuntu LTS-Images vor, wenn Sie eine EC2-Instanz manuell von der Konsole aus starten:

  • Ubuntu Server 16.04 LTS (HVM), SSD-Volume-Typ - ami-96666ff5
  • Ubuntu Server 14.04 LTS (HVM), SSD-Volume-Typ - ami-807876e3

Dies entspricht den Empfehlungen zur Verwendung von HVM-Virtualisierung und EBS-gestützten SSD-Volumes.

Um die beste Leistung zu erzielen, empfehlen wir, dass Sie beim Starten Ihrer Instanzen Instanztypen der aktuellen Generation und HVM-AMIs verwenden.

Um die von AWS empfohlenen AMIs zu erhalten, können Sie die folgenden Aufgaben ausführen:

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

Was die folgende Ausgabe ergibt:

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

Wenn Sie die vom Playbook zurückgegebenen AMI-IDs vergleichen, sehen Sie, dass AWS nicht das neueste verfügbare Image empfiehlt, sondern das zweit- oder drittletzte. Ich weiß nicht, welche Kriterien / Heuristiken sie hier verwenden.

htaccess
quelle