Übung: Abfragen von System- und Laufzeitinformationen zum virtuellen Computer

Abgeschlossen

Nachdem der virtuelle Computer erstellt wurde, können wir über andere Befehle Informationen über ihn erhalten.

Führen Sie zunächst vm list aus.

az vm list

Dieser Befehl gibt alle virtuelle Computer zurück, die in diesem Abonnement definiert sind. Die Ausgabe kann über den Parameter --resource-group nach einer bestimmten Ressourcengruppe gefiltert werden.

Ausgabetypen

Beachten Sie, dass der Standardantworttyp für alle Befehle, die wir bisher ausgeführt haben, JSON ist. Das ist gut für die Skripterstellung, aber häufig nicht zu gut zu lesen. Sie können den Ausgabestil für jede Antwort mit dem Flag --output ändern. Führen Sie beispielsweise den folgenden Befehl in Azure Cloud Shell aus, um sich den anderen Ausgabestil anzusehen.

az vm list --output table

Neben table können Sie json (Standard), jsonc (farbiger JSON-Code) oder tsv (durch Tabstopp getrennte Werte) angeben. Probieren Sie einige Varianten mit dem oben genannten Befehl aus, um den Unterschied zu sehen.

Abrufen der IP-Adresse

Ein anderer nützlicher Befehl ist vm list-ip-addresses, mit dem die öffentlichen und privaten IP-Adressen eines virtuellen Computers aufgelistet werden. Wenn sie sich ändern oder Sie sie während der Erstellung nicht erfasst haben, können Sie sie jederzeit abrufen.

az vm list-ip-addresses -n SampleVM -o table

Die Ausgabe wird wie folgt zurückgegeben:

VirtualMachine    PublicIPAddresses    PrivateIPAddresses
----------------  -------------------  --------------------
SampleVM          168.61.54.62         10.0.0.4

Tipp

Beachten Sie, dass wir eine Kurzsyntax für das Flag --output als -o verwenden. Die meisten Parameter von Azure CLI-Befehlen können auf einen einzigen Bindestrich und Buchstaben verkürzt werden. Sie können z. B. --name zu -n und --resource-group zu -g verkürzen. Dies ist praktisch für die Eingabe von Zeichen auf der Tastatur. Aus Klarheitsgründen wird jedoch empfohlen, in Skripts den vollständigen Namen der Option zu verwenden. Weitere Informationen zu den einzelnen Befehlen finden Sie in der Dokumentation.

Abrufen von VM-Details

Sie können mit dem Namen oder der ID eines virtuellen Computers detailliertere Informationen zu diesem abrufen, indem Sie den Befehl vm show ausführen.

az vm show --resource-group "<rgn>[sandbox resource group name]</rgn>" --name SampleVM

Dies gibt einen recht großen JSON-Block mit allen möglichen Informationen zur VM zurück. Dazu gehören angeschlossene Speichergeräte, Netzwerkschnittstellen und alle Objekt-IDs für Ressourcen, mit denen die VM verbunden ist. Auch hier könnten wir zu einem Tabellenformat wechseln, aber dabei entfallen nahezu alle interessanten Daten. Stattdessen können wir auf eine integrierte Abfragesprache für JSON mit dem Namen JMESPath zurückgreifen.

Hinzufügen von Filtern zu Abfragen mit JMESPath

JMESPath ist eine branchenübliche Abfragesprache, die auf JSON-Objekten basiert. Die einfachste Abfrage ist die Angabe eines Bezeichners, der einen Schlüssel im JSON-Objekt auswählt.

Betrachten wir beispielsweise das Objekt:

{
  "people": [
    {
      "name": "Fred",
      "age": 28
    },
    {
      "name": "Barney",
      "age": 25
    },
    {
      "name": "Wilma",
      "age": 27
    }
  ]
}

Wir können die Abfrage people verwenden, um das Array der Werte für das Array people zurückzugeben. Wenn wir nur eine der Personen wünschen, können wir einen Indexer verwenden. people[1] würde z.B. Folgendes zurückgeben:

{
    "name": "Barney",
    "age": 25
}

Wir können auch bestimmte Qualifizierer hinzufügen, die auf der Grundlage einiger Kriterien eine Teilmenge der Objekte zurückgeben würden. Das Hinzufügen des people[?age > '25']-Qualifizierers würde beispielsweise Folgendes zurückgeben:

[
  {
    "name": "Fred",
    "age": 28
  },
  {
    "name": "Wilma",
    "age": 27
  }
]

Zum Schluss können wir die Ergebnisse durch Hinzufügen einer Auswahl (people[?age > '25'].[name]) einschränken, die nur die Namen zurückgibt:

[
  [
    "Fred"
  ],
  [
    "Wilma"
  ]
]

JMESQuery bietet mehrere andere interessante Abfragefunktionen. Wenn Sie Zeit haben, sehen Sie sich das Onlinetutorial auf der Website JMESPath.org an.

Filtern Ihrer Azure CLI-Abfragen

Mit einem grundlegenden Verständnis von JMES-Abfragen können wir Filter zu den Daten hinzufügen, die von Abfragen wie dem vm show-Befehl zurückgegeben werden. Sie können z. B. den Benutzernamen des Administrators abrufen:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "osProfile.adminUsername"

Wir können die Größe bestimmen, die unserer VM zugewiesen wird:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query hardwareProfile.vmSize

Wenn Sie alle IDs für Ihre Netzwerkschnittstellen abrufen möchten, können Sie die folgende Abfrage ausführen:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "networkProfile.networkInterfaces[].id"

Diese Abfragetechnik funktioniert mit jedem Azure CLI-Befehl und kann verwendet werden, um bestimmte Daten über die Befehlszeile abzurufen. Sie ist auch für die Skripterstellung nützlich. Sie können z. B. einen Wert aus Ihrem Azure-Konto abrufen und in einer Umgebungs- oder Skriptvariablen speichern. Wenn Sie sich dafür entscheiden, ihn auf diese Weise zu verwenden, ist es hilfreich, den Parameter --output tsv hinzuzufügen (den Sie zu -o tsv verkürzen können). Dadurch werden Ergebnisse zurückgegeben, die nur die tatsächlichen Datenwerte mit Tabulatortrennzeichen enthalten.

Beispiel:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "networkProfile.networkInterfaces[].id" -o tsv

gibt diesen Text zurück: /subscriptions/20f4b944-fc7a-4d38-b02c-900c8223c3a0/resourceGroups/2568d0d0-efe3-4d04-a08f-df7f009f822a/providers/Microsoft.Network/networkInterfaces/SampleVMVMNic