Czy istnieje sposób na wyszukanie regionu instancji z poziomu instancji?
Szukam czegoś podobnego do metody znajdowania identyfikatora instancji .
amazon-ec2
amazon-web-services
Gary Richardson
źródło
źródło
http://169.254.169.254/latest/meta-data/placement/availability-zone
i usuń ostatni znak.http://169.254.169.254/latest/meta-data/placement/region
Odpowiedzi:
Ten adres URL ( http://169.254.169.254/latest/dynamic/instance-identity/document ) już nie działa. Otrzymuję kod 404, gdy próbowałem go użyć. Mam następujący kod, który jednak wydaje się działać:
Mam nadzieję że to pomoże.
EDYCJA: Ulepszona
sed
na podstawie komentarzyźródło
ec2-metadata
jest tylko opakowaniem tego interfejsu API, ale zasadniczo robi to samo.sed 's/[a-z]$//
Jest jeszcze jeden sposób, aby to osiągnąć:
źródło
404 - Not Found
próbujeGET
tego adresu URL z automatu wus-east-1a
.curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
Jeśli nie przeszkadza Ci używanie
jq
, możesz uruchomić:Myślę, że to najczystszy sposób.
źródło
W przypadku systemów opartych na Debianie polecenie jest bez myślnika.
źródło
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
nie wygląda na coś, co jest dostępne domyślnie - czy możesz dołączyć instrukcje dotyczące instalacji?Jeśli chcesz uniknąć wyrażeń regularnych, oto jedna linijka, którą możesz zrobić w Pythonie:
źródło
Możesz użyć ec2-metadata:
źródło
eu-central-1
środku, masz przerąbane.central
nie istniało, kiedy początkowo pisałem odpowiedź. Jest teraz dodany.awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
zachowuje tylko pierwsze dwa składniki nazwy AZ.eu-west-1
,eu-west-2
aeu-west-3
(takżeus-west-1
ius-west-2
) @OP: samo dopasowanie'[a-z][a-z]-[a-z]*-[0-9][0-9]*'
wydaje się bezpieczniejsze (to jest podstawowe wyrażenie regularne, można je skrócić za pomocą rozszerzonego RE). (Bieżące wyrażenie regularne zostanie przerwane naca
region,af
regiony ime
region)Najłatwiejsze, jakie znalazłem do tej pory
źródło
bardzo prosta jedna wkładka
źródło
curl: (6) Could not resolve host: instance-data; Name or service not known
błąd.Jeśli masz zainstalowany jq , możesz to zrobić (prawdopodobnie najbardziej wdzięczna metoda) w ten sposób:
Zwraca to po prostu nieprzetworzoną wartość „regionu” bez żadnego ładnego nadruku lub innego formatowania. Źródła: AWS Forum
źródło
Pobierz region ze strefy dostępności, usuń jego ostatnią literę.
źródło
Użyj JQ:
źródło
Jeśli możesz korzystać z AWS Java SDK, istnieje teraz metoda, która zwraca bieżącą nazwę regionu (na przykład „us-east-1”, „eu-west-1”):
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#getCurrentRegion ()
źródło
To najczystsze rozwiązanie, jakie znalazłem:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
Na przykład,
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
źródło
Dzięki https://unix.stackexchange.com/a/144330/135640 przy bash 4.2+ możemy po prostu usunąć ostatni znak ze strefy dostępności:
Zakłada się, że AWS nadal używa jednego znaku dla stref dostępności dołączonych do regionu.
źródło
region=${region%?}
2 liner, który działa tak długo, jak używasz ec2.internal jako domeny wyszukiwania:
źródło
Dla każdego, kto chce to zrobić z dobrym OL PowerShell
źródło
W pewnym momencie, ponieważ większość z tych odpowiedzi zostały zamieszczone, AWS zrobił coś rozsądnego i wdrożono nową drogę:
latest/meta-data/placement/region
.Oznacza to, że pobranie regionu powinno być tak proste, jak
REGION="$(wget -q -O - http://169.254.169.254/latest/meta-data/placement/region)"
EDYCJA: Warto również wspomnieć, że ten punkt końcowy został udostępniony w wersji API metadanych 2019-10-01. Przed użyciem upewnij się, że Twoja instancja obsługuje tę lub nowszą wersję, zaznaczając
http://169.254.169.254/
.źródło
Lub nie wymagaj Ubuntu lub tego narzędzia i po prostu zrób:
źródło
Jeśli pracujesz z json - używaj odpowiednich narzędzi. jq jest w tym przypadku bardzo potężny.
źródło
Działa to dla eu-central-1, jak również dla różnych stref literowych. (Nie mam wystarczającej liczby przedstawicieli, aby odpowiedzieć na powyższą odpowiedź seda)
źródło
ec2metadata --availability-zone | sed 's/.$//'
(bez kreski)Jeśli korzystasz z systemu Windows, możesz użyć jednej linijki PowerShell:
źródło
Aby znaleźć informacje o EC2, do którego jesteś zalogowany, możesz skorzystać z narzędzia ec2-metadata.
Narzędzie można zainstalować, korzystając z tego łącza. Po zainstalowaniu narzędzia możesz uruchomić
# ec2-metadata -z
poznać region.
To narzędzie jest instalowane z najnowszym (10.10) systemem AMI Ubuntu,
źródło
ec2-metadata -z
pokazuje tylko strefę dostępności, a nie region.Szukałem również rozwiązania, aby znaleźć region z instancji, a oto moje czyste rozwiązanie Bash:
chyba że są regiony, w których AZ ma więcej niż dwie litery, o których nie wiem.
źródło
Jeśli chcesz uzyskać region za pomocą JS, powinno to działać:
To było mapowanie znalezione z AWS DOCS, w odpowiedzi na wywołanie API metadanych, wystarczy przyciąć ostatni znak.
źródło
ec2metadata
(bez myślnika) to bieżące polecenie, które zapewnia wszystkie informacje o hostingu aws dotyczące twojego ec2 box. jest to najbardziej eleganckie i bezpieczne podejście. (ec2-metadata
jest starym, już nieważnym poleceniem).źródło
Metoda wykorzystująca tylko egrep, która powinna działać na większości uruchomionych instancji Linuksa bez konieczności instalowania jakichkolwiek dodatkowych narzędzi. Przetestowałem to na liście wszystkich obecnych regionów AWS i wszystkie pasują.
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
Wyjaśnienie REGEX:
Jeśli chcesz to do zmiennej, wykonaj:
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
źródło
W przypadku rozwiązań sed i curl wygląda na to, że format nieco się zmienił. U mnie działa
źródło
Możesz uzyskać region wystąpienia za pomocą tego żądania curl
źródło