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?
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?
Odpowiedzi:
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.
Najłatwiej: znajdź pliki AMI w przeglądarce internetowej
Możesz wybrać interfejs do wybierania obrazów. Przejdź do:
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
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.
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 ”.
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ź].
hvm-instance
i 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
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”.
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'
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
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ę.
Istnieje pełna lista dostępnych oficjalnych AMI na portalu Ubuntu Cloud Portal . Dodatkowe zasoby dotyczące oficjalnych wydań ECI AMI firmy Canonical znajdują się w Pomocy Ubuntu: Przewodnik startowy EC2 oraz surowy katalog wszystkich AMI wydanych przez Canonical w obrazach Ubuntu EC2
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:
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.