Ćwiczenie — Wysyłanie zapytań dotyczących systemu i środowiska uruchomieniowego maszyny wirtualnej

Ukończone

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-addressespolecenie , 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