Ćwiczenie — Wysyłanie zapytań dotyczących systemu i środowiska uruchomieniowego maszyny wirtualnej
Teraz, gdy utworzyliśmy maszynę wirtualną, możemy uzyskać informacje o niej za pomocą innych poleceń.
Zacznijmy od uruchomienia polecenia vm list
.
az vm list
To polecenie zwróci wszystkie maszyny wirtualne zdefiniowane w ramach tej subskrypcji. Dane wyjściowe można filtrować do określonej grupy zasobów za pomocą parametru --resource-group
.
Typy danych wyjściowych
Należy zwrócić uwagę, że domyślny typ odpowiedzi dla wszystkich wykonanych do tej pory poleceń to JSON. Jest to doskonałe rozwiązanie do tworzenia skryptów, ale większość ludzi utrudnia czytanie. Możesz zmienić styl danych wyjściowych dla każdej odpowiedzi za pomocą flagi --output
. Uruchom na przykład następujące polecenie w usłudze Azure Cloud Shell, aby wyświetlić inny styl danych wyjściowych.
az vm list --output table
Oprócz wartości table
możesz określić wartości json
(ustawienie domyślne), jsonc
(pokolorowany ciąg JSON) lub tsv
(wartości rozdzielone tabulatorami). Wypróbuj kilka odmian z poprzednim poleceniem, aby zobaczyć różnicę.
Uzyskiwanie adresu IP
Innym przydatnym poleceniem jest vm list-ip-addresses
polecenie , które wyświetla listę publicznych i prywatnych adresów IP maszyny wirtualnej. Jeśli adresy uległy zmianie lub nie zostały zapisane podczas tworzenia, możesz je pobrać w dowolnym momencie.
az vm list-ip-addresses -n SampleVM -o table
Spowoduje to zwrócenie danych wyjściowych, takich jak:
VirtualMachine PublicIPAddresses PrivateIPAddresses
---------------- ------------------- --------------------
SampleVM 168.61.54.62 10.0.0.4
Napiwek
Zwróć uwagę, że używamy skróconej składni flagi --output
jako -o
. Większość parametrów można skrócić do poleceń interfejsu wiersza polecenia platformy Azure do pojedynczej kreski i litery. Na przykład można skrócić --name
do -n
i --resource-group
do -g
. Jest to przydatne do wprowadzania znaków klawiatury, ale zalecamy używanie pełnej nazwy opcji w skryptach w celu uzyskania jasności. Zapoznaj się z dokumentacją, aby uzyskać szczegółowe informacje o każdym poleceniu.
Pobieranie szczegółów maszyny wirtualnej
Możemy uzyskać bardziej szczegółowe informacje o określonej maszynie wirtualnej według nazwy lub identyfikatora uruchamiającego vm show
polecenie.
az vm show --resource-group "<rgn>[sandbox resource group name]</rgn>" --name SampleVM
Zwraca to dość duży blok JSON z wszelkiego rodzaju informacjami o maszynie wirtualnej, w tym dołączonymi urządzeniami magazynowymi, interfejsami sieciowymi i wszystkimi identyfikatorami obiektów dla zasobów, z którymi jest połączona maszyna wirtualna. W tym przypadku również można zmienić format na tabelę, ale w ten sposób pominiemy niemal wszystkie interesujące dane. Zamiast tego możemy użyć wbudowanego języka zapytań dla formatu JSON o nazwie JMESPath.
Dodawanie filtrów do zapytań za pomocą funkcji JMESPath
JMESPath to język zapytań zgodny ze standardami branżowymi stworzony pod kątem obiektów w formacie JSON. Najprostsze zapytanie określa identyfikator, służący do wybrania klucza w obiekcie JSON.
Na przykład w przypadku obiektu:
{
"people": [
{
"name": "Fred",
"age": 28
},
{
"name": "Barney",
"age": 25
},
{
"name": "Wilma",
"age": 27
}
]
}
Możemy użyć zapytania people
, aby zwrócić tablicę wartości dla tablicy people
. Jeśli zależy nam tylko na jednej osobie, możemy skorzystać z indeksatora. Na przykład polecenie people[1]
zwróci:
{
"name": "Barney",
"age": 25
}
Możemy również dodać konkretne kwalifikatory, co spowoduje zwrócenie podzbioru obiektów na podstawie określonych kryteriów. Na przykład dodanie kwalifikatora people[?age > '25']
spowoduje zwrócenie następującego wyniku:
[
{
"name": "Fred",
"age": 28
},
{
"name": "Wilma",
"age": 27
}
]
Możemy ograniczyć wyniki, dodając operację wyboru people[?age > '25'].[name]
, co spowoduje zwrócenie tylko nazwisk:
[
[
"Fred"
],
[
"Wilma"
]
]
Język JMESQuery oferuje jeszcze kilka innych ciekawych funkcji zapytań. Jeśli masz czas, zapoznaj się z samouczkiem online dostępnym w witrynie JMESPath.org.
Filtrowanie zapytań interfejsu wiersza polecenia platformy Azure
Mając podstawową wiedzę na temat zapytań JMES, możemy dodawać filtry do danych zwracanych przez zapytania, takie jak vm show
polecenie. Na przykład możemy pobrać nazwę użytkownika administratora:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "osProfile.adminUsername"
Możemy dowiedzieć się, jaki rozmiar został przypisany do naszej maszyny wirtualnej:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query hardwareProfile.vmSize
Lub, aby pobrać wszystkie identyfikatory interfejsów sieciowych, możemy uruchomić zapytanie:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "networkProfile.networkInterfaces[].id"
Ta technika zapytania działa z dowolnym poleceniem interfejsu wiersza polecenia platformy Azure i umożliwia ściąganie określonych bitów danych w wierszu polecenia. Jest to również przydatne w przypadku skryptów. Możesz na przykład ściągnąć wartość z konta platformy Azure i zapisać ją w zmiennej środowiskowej lub skryptowej. Jeśli zdecydujesz się go użyć w ten sposób, warto dodać --output tsv
parametr (który można skrócić do -o tsv
). Spowoduje to zwrócenie wyników, które zawierają tylko rzeczywiste wartości danych z separatorami tabulacji.
Na przykład:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "networkProfile.networkInterfaces[].id" -o tsv
zwróci tekst: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Network/networkInterfaces/SampleVMVMNic