Skąd mam wiedzieć, jakie Ubuntu AMI uruchomić na EC2?

29

Kiedy chcę uruchomić instancję Ubuntu na EC2, jak znaleźć właściwą? Istnieją tysiące publicznych obrazów, które mają w nazwie „Ubuntu”. Interesuje mnie tylko uruchamianie oficjalnych obrazów Ubuntu. Jak mogę teraz wybrać, który AMI jest właściwy?

smoser
źródło

Odpowiedzi:

26

Sukces Ubuntu jako platformy i zaangażowanie Ubuntu w odświeżanie AMI oznacza, że ​​na Amazon EC2 są dosłownie tysiące zdjęć z „ubuntu” w nazwie. To w połączeniu z brakiem Ubuntu w menu „Szybki start” sprawia, że ​​wybranie odpowiedniego AMI nie jest łatwym zadaniem.

Niektóre ogólne informacje o Ubuntu

Być może już znasz te elementy, ale chcę je wskazać tym, którzy dopiero zaczynają pracę z Ubuntu lub EC2.

  • Ubuntu wydaje się co 6 miesięcy. Każde wydanie ma numer wersji i kryptonim. Najważniejszą rzeczą do odnotowania tutaj jest to, że co 2 lata wydawane jest wydanie LTS (Long Term Support). Jeśli chcesz uzyskać stabilność i wsparcie przez 5 lat, wybierz wersję LTS. Jeśli chcesz najnowsze pakiety, wybierz najnowszą wersję. Zobacz wpis na Wikipedii, aby uzyskać więcej informacji.
  • W chwili pisania tego tekstu w Amazon EC2 jest 5 „regionów”. Każdy region reprezentuje położenie geograficzne. Każdy region ma swoje własne identyfikatory AMI. Wewnątrz każdego regionu znajdują się 2 architektury (x86_64, i386) i 2 typy „root store” (EBS lub instancja). Oznacza to, że dla każdej wersji Ubuntu kompilujemy 20 identyfikatorów ami.

Najłatwiej: znajdź pliki AMI w przeglądarce internetowej

Możesz wybrać interfejs do wybierania obrazów. Przejdź do:

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

    Na dole tej strony możesz wybrać region, wydanie, arch lub sklep główny. Tutaj pokazane są tylko najnowsze wersje. Po dokonaniu wyboru możesz skopiować i wkleić numer ami lub po prostu kliknąć go, aby przejść bezpośrednio do strony uruchamiania konsoli EC2 dla tego AMI.

lub

  • https://cloud-images.ubuntu.com/server/releases/
    • Wybierz wydanie według numeru lub kryptonimu
    • Wybierz „release /”: przechowujemy historyczne wersje do debugowania, ale katalog „release /” zawsze będzie najnowszy.
    • Wybierz swój AMI z tabeli i kliknij, aby uruchomić w konsoli lub skopiuj i wklej wiersz poleceń.

Wyszukaj w konsoli Amazon EC2

Konsola EC2 to graficzny sposób sortowania AMI i wybierania do uruchomienia. Aby uruchomić tutaj oficjalny obraz Ubuntu, wykonaj poniższe czynności.

  • Wybierz region w lewym górnym rogu, w obszarze „Nawigacja” Przykład: „Us East (Wirginia)”
  • Kliknij „amis” Czy nie kliknij „Launch Instancji” [patrz uwaga poniżej]
  • dla „Przeglądanie” wybierz „Wszystkie obrazy”
  • Ogranicz wyniki do obrazów stabilnego wydania Ubuntu, wpisując ubuntu-images /

    Powinieneś rozwinąć pole „Nazwa AMI” tak szeroko, jak to możliwe (może zmniejszyć inne).

  • Ogranicz wyniki do określonej wersji, dodając „. *”.

    Na przykład: ubuntu-images /.* 10.04

  • Ogranicz wyniki do danego łuku, dodając „. * I386” lub „. * Amd64”

    Uwaga : jeśli chcesz uruchomić m1.small lub c1.medium, potrzebujesz 'i386'. Jeśli chcesz uruchomić t1.micro, musisz wybrać obraz „ebs”.

  • Posortuj wyniki według nazwy AMI i dokonaj wyboru

    Sortując według nazwy AMI, możesz łatwiej zobaczyć najnowszą AMI dla danego zestawu. Każdy AMI kończy się liczbą w formacie RRRRMMDD (rok, miesiąc, dzień). Chcesz najnowszą.

  • Sprawdź, czy właścicielem jest 099720109477!

    Każdy użytkownik może zarejestrować AMI pod dowolną nazwą. Nic nie stoi na przeszkodzie, aby złośliwy użytkownik zarejestrował AMI, który pasowałby do powyższego wyszukiwania. Aby więc być bezpiecznym, musisz sprawdzić, czy właścicielem ami jest „ 099720109477 ”.

  • Jeśli „Właściciel” nie jest dla Ciebie kolumną, kliknij „Pokaż / Ukryj” w prawym górnym rogu i wybierz „Właściciel”, aby wyświetlić.
  • Kliknij nazwę AMI, a następnie kliknij „Uruchom”

Notatki

  • Dostęp HTTPS : spośród powyższych opcji, teraz https://cloud-images.ubuntu.com/server/releases/ jest jedyną, która dostarcza dane przez https. Może to być dla Ciebie ważne, jeśli obawiasz się potencjalnych ataków „Man in the Middle” podczas znajdowania identyfikatora AMI. Poprosiłem Ahmeda [kim0 in irc] o wsparcie dostępu https do https://cloud.ubuntu.com/ami .

  • Okno dialogowe „Uruchom wystąpienie” konsoli internetowej : W oknie dialogowym „Uruchom wystąpienie” nie widziałem sposobu, aby zobaczyć identyfikator właściciela. Ponieważ jeśli tak, sugeruję, aby nie używać tego okna dialogowego do wyszukiwania „AMI społeczności”. Po prostu nie można w wiarygodny sposób ustalić, kto jest właścicielem obrazu z poziomu konsoli. Dla zaawansowanych użytkowników wkrótce będę blogować, aby znaleźć programowo AMI [podpowiedź].

Źródło

smoser
źródło
Czy mógłbyś precyzyjnie określić różnicę między hvm-instancei hvm-ssd? Obawiam się, że „instancja” oznacza „parawirusowy”, ale nie jestem pewien i nie mogę znaleźć informacji na ten temat. Warto również zauważyć, że https://cloud-images.ubuntu.com/locator/oferują filtry ... na dole strony
Balmipour
11

Nowa i ulepszona wersja.

# 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

Zasadniczo pobiera nieprzetworzone dane używane na stronie wyszukiwania ami Ubuntu i używa jq do parsowania wiersza, który chcę, a następnie grep, aby wyciągnąć wartość. Znacznie szybszy niż stara wersja.


-- orginalna wersja

Oto inny przykład. Właśnie to napisałem, aby pobrać najnowszy sprawdzony identyfikator AMI. Używa narzędzia aws cli do zapytania API, wykorzystując fakt, że nazwy sortowane są według daty, aby uzyskać najnowsze.

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

Działa w 2 częściach. Pierwsza część zawiera wszystkie interfejsy AMI dla systemu Ubuntu, które spełniają różne kryteria (ebs, x86_64 i wzorzec nazwy). Wyciąga nazwę i sortuje według niej. Nazwy są sformatowane, aby sortować je według daty, tak aby ostatnia była najnowsza. Ta nazwa jest następnie przypisywana do zmiennej „name”.

Druga część używa tej nazwy do żądania identyfikatora AMI dla AMI o tej nazwie. Analizuje tylko identyfikator i przypisuje go do „ami_id”.

John Eikenberry
źródło
Czy możesz wyjaśnić, co to robi?
Kaz Wolfe
Dodano wyjaśnienie do odpowiedzi.
John Eikenberry,
4
To powinno osiągnąć coś podobnego, ale używając wyrażenia zapytania 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

Używając ruby ​​aws-sdk, możesz programowo odkryć najnowszą wersję Ubuntu AMI w ten sposób

    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
Lakmus
źródło
2

Możesz użyć https://cloud-images.ubuntu.com/locator/ec2/ które zapewniają kompleksowe porównanie na podstawie wersji, daty wydania itp.

Wyszukaj wersję, region i posortuj według daty wydania, aby uzyskać najnowszą wersję.

Jasim Muhammed
źródło
1

Pomyślałem, że przydałoby się zademonstrować, jak to zrobić za pomocą Ansible za pomocą modułu ec2_ami_find .

W momencie pisania (2017-06-07) w regionie ap-południowy-2 AWS zasugeruje te obrazy Ubuntu LTS, jeśli ręcznie uruchomisz instancję EC2 z konsoli:

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

Jest to zgodne z ich zaleceniami dotyczącymi korzystania z wirtualizacji HVM i woluminów SSD wspieranych przez EBS.

Aby uzyskać najlepszą wydajność, zalecamy używanie typów wystąpień bieżącej generacji i AMI HVM podczas uruchamiania wystąpień.

Aby uzyskać te same AMI, które zaleca AWS, możesz użyć następujących zadań:

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

Co daje następujące dane wyjściowe:

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

Jeśli porównasz identyfikatory AMI zwrócone przez podręcznik, możesz zobaczyć, że AWS nie poleca najnowszego dostępnego obrazu, a raczej drugi lub trzeci ostatni. Nie wiem, jakich kryteriów / heurystyki używają tutaj.

htaccess
źródło