Freigeben über


Auffüllen von Variablen für die Verwendung in Azure CLI-Skripts

In diesem Lernprogrammschritt lernen Sie, mit Variablen zu arbeiten:

  • Führen Sie einen Azure CLI-Befehl aus, und speichern Sie die Ausgabe in einer Variablen.
  • Lesen Einer lokalen JSON-Datei und Speichern von Eigenschaftswerten in einer Variablen.

Einige häufige Anwendungsfälle für Variablen sind:

  • Abrufen von Informationen zu einer vorhandenen Azure-Ressource, z. B. einer Ressourcen-ID.
  • Ausgabe eines Azure CLI-Befehls abrufen, wie zum Beispiel ein Passwort.
  • Abrufen von JSON-Objekten für Umgebungsinformationen, z. B. Entwicklungs-, Phasen- und Produktions-IDs.

Sie können die Variable in Azure CLI verwenden, um Build- und Zerstörungsvorgänge im großen Maßstab auszuführen.

Voraussetzungen

  • Sie haben Zugriff auf eine Ressourcengruppe und ein Speicherkonto mit reader oder höheren Berechtigungen auf Speicherkontoebene.

Abrufen der Befehlsausgabe mit JMESPath-Abfrage

Abrufen von Informationen über eine bestehende Azure-Ressource mit dem Parameter --query des show-Befehls. Eine JMESPath-Abfrage wird ausgeführt, und mindestens ein Eigenschaftswert einer Azure-Ressource wird zurückgegeben.

Tipp

Die Syntax von --query ist case-sensitiv und umgebungsspezifisch. Wenn Sie leere Ergebnisse erhalten, überprüfen Sie die Großschreibung. Vermeiden Sie Quotenfehler, indem Sie die in "Learn Azure CLI"-Syntaxunterschiede in Bash, PowerShell und Cmd gelernten Regeln anwenden.

Sofern der --output Parameter nicht angegeben ist, basieren diese Beispiele auf einer Standardausgabekonfiguration, die json in "Vorbereiten Ihrer Umgebung für die Azure CLI" festgelegt ist.

Abrufen von JSON-Wörterbucheigenschaften einer Azure-Ressource

Verwenden Sie das Speicherkonto, das in Azure CLI-Syntaxunterschiede in Bash, PowerShell und Cmd kennenlernen erstellt wurde, um die primaryEndpoints Ihres neuen Speicherkontos abzurufen.

az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa000000000> \
                        --query primaryEndpoints

Ausgabe des JSON-Konsolenwörterbuchs:

{
  "blob": "https://msdocssa00000000.blob.core.windows.net/",
  "dfs": "https://msdocssa00000000.dfs.core.windows.net/",
  "file": "https://msdocssa00000000.file.core.windows.net/",
  "internetEndpoints": null,
  "microsoftEndpoints": null,
  "queue": "https://msdocssa00000000.queue.core.windows.net/",
  "table": "https://msdocssa00000000.table.core.windows.net/",
  "web": "https://msdocssa00000000.z13.web.core.windows.net/"
}

Abrufen einzelner JSON-Objekte

Um einzelne Eigenschaften in einem Array (Liste) zurückzugeben, geben Sie eine durch Trennzeichen getrennte Liste der Speicherkontoeigenschaften an.

az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa000000000> \
                        --query "[id, primaryLocation, primaryEndpoints.blob, encryption.services.blob.lastEnabledTime]"

JSON-Array-Ausgabe der Konsole:

[
  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/msdocs-tutorial-rg-00000000/providers/Microsoft.Storage/storageAccounts/   msdocssa000000000",
  "eastus",
  "https://msdocssa000000000.blob.core.windows.net/",
  "yyyy-mm-ddT19:11:56.399484+00:00"
]

Umbenennen von Eigenschaften

Benennen Sie Eigenschaften mit geschweiften Klammern ({}) und einer durch Trennzeichen getrennten Liste um. Die neuen Eigenschaftennamen dürfen keine Leerzeichen enthalten. In diesem Beispiel wird die Ausgabe im table Format zurückgegeben.

az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa000000000> \
                        --query "{saName:name, saKind:kind, saMinTLSVersion:minimumTlsVersion}" \
                        --output table

Ausgabe der Konsolentabelle. Der erste Buchstabe jeder Spalte ist großgeschrieben in --output table:

SaName             SaKind     SaMinTLSversion
-----------------  ---------  -----------------
msdocssa000000000  StorageV2  TLS1_0

Filterabfrageergebnisse

Kombinieren Sie das, was Sie über das Zitieren gelernt haben, mit dem, was Sie gerade über --query gelernt haben. Diese Beispiele wenden einen Filter an.

In Bash können Sie kein Leerzeichen vor oder hinter dem Gleichheitszeichen (=) haben. Sie können Anführungszeichen um den Variablenwert verwenden, sodass msdocs-tutorial-rg-00000000"msdocs-tutorial-rg-00000000" beide richtig sind.

rgName="<msdocs-tutorial-rg-00000000>"

# Get a list of all Azure storage accounts that allow blob public access.
# Notice the backticks and escape characters needed for boolean values.
az storage account list --resource-group $rgName \
                        --query "[?allowBlobPublicAccess == \`true\`].name"

# Get a list of Azure storage accounts that were created in the last 30 days. Return the results as a table.
saDate=$(date +%F -d "-30days")
az storage account list --resource-group $rgName \
                        --query "[?creationTime >='$saDate'].{saName:name, createdTimeStamp:creationTime}" \
                        --output table

# Get a list of Azure storage accounts created in this tutorial
az storage account list --resource-group $rgName \
                        --query "[?contains(name, 'msdocs')].{saName:name, saKind:kind, saPrimaryLocation:primaryLocation, createdTimeStamp:creationTime}" \
                        --output table

Erstellen einer neuen Azure-Ressource zum Speichern der Ausgabe in einer Variablen

Das Erlernen der Befehlsausgabe in einer Variablen ist von Vorteil beim Erstellen von Azure-Ressourcen, die geheime Schlüssel ausgeben, die geschützt werden sollen. Wenn Sie z. B. einen Dienstprinzipal erstellen, eine Anmeldeinformationen zurücksetzen oder ein Azure Key Vault-Geheimnis abrufen, sollte die Ausgabe des Befehls geschützt werden.

Erstellen Sie einen neuen Azure Key Vault und einen geheimen Schlüssel, und geben Sie die Befehlsausgabe an eine Variable zurück. Ihr Azure Key Vault-Name muss global eindeutig sein, sodass der $RANDOM Bezeichner in diesem Beispiel verwendet wird. Weitere Benennungsregeln für Azure Key Vault finden Sie unter Allgemeine Fehlercodes für Azure Key Vault.

In diesen Beispielen wird echo verwendet, um die Variablenwerte zu überprüfen, da es sich hierbei um ein Lernprogramm handelt. Verwenden Sie echo nicht für geheime und Kennwortwerte in Produktionsumgebungen.

# Set your variables.
let "randomIdentifier=$RANDOM*$RANDOM"
rgName="<msdocs-tutorial-rg-00000000>"
kvName="msdocs-kv-$randomIdentifier"
location="eastus"

# Set your default output to none
az config set core.output=none

# Create a new Azure Key Vault returning the Key Vault ID
myNewKeyVaultID=$(az keyvault create --name $kvName --resource-group $rgName --location $location --query id --output tsv)
echo "My new Azure Key Vault ID is $myNewKeyVaultID"

# Wait about 1 minute for your Key Vault creation to complete.

# Create a new secret returning the secret ID
kvSecretName="<myKVSecretName>"
kvSecretValue="<myKVSecretValue>"
myNewSecretID=$(az keyvault secret set --vault-name $kvName --name $kvSecretName --value $kvSecretValue --query id --output tsv)
echo "My new secret ID is $myNewSecretID"

# Reset your default output to json
az config set core.output=json

Abrufen des Inhalts einer JSON-Datei und Speichern in einer Variablen

Dieser nächste Abschnitt ist eine "Stretch-Aufgabe" für ein Onboarding-Lernprogramm. Um Azure-Ressourcen jedoch in Entwicklungs-, Phasen- und Produktionsumgebungen zu verwalten, müssen Sie häufig eine Konfigurationsdatei lesen.

Sind Sie bereit, Ihre Azure CLI-Fähigkeiten zu erweitern? Erstellen Sie eine JSON-Datei, die den folgenden JSON-Code oder Ihre Wahl an Dateiinhalten enthält. Speichern Sie die Textdatei auf Ihrem lokalen Laufwerk. Wenn Sie in Azure Cloud Shell arbeiten, verwenden Sie das upload/download files Symbol in der Menüleiste, um die Textdatei auf Ihrem Cloudspeicherlaufwerk zu speichern.

{
  "environments": {
    "dev": [
      {
        "id": "1",
        "kv-secretName": "dev1SecretName",
        "status": "inactive",
      },
      {
        "id": "2",
        "kv-secretName": "dev2SecretName",
        "status": "active"
      }
    ],
    "stg": {
      "id": "3",
      "kv-secretName": "dev3SecretName"
    },
    "prod": {
      "id": "4",
      "kv-secretName": "dev4SecretName"
    }
  }
}

Speichern Sie den Inhalt Ihrer JSON-Datei in einer Variablen, um sie in Ihren Azure CLI-Befehlen weiter zu verwenden. Ändern Sie in diesem Beispiel msdocs-tutorial.json zum Namen Ihrer Datei. Speichern Sie den echo Befehl nicht in Skripts auf Produktionsebene, da die Ausgabe in Ihrer Protokolldatei gespeichert wird.

Das folgende Bash-Skript wurde in Azure Cloud Shell getestet und hängt vom Bash jq ab, das in Ihrer Umgebung installiert werden muss.

# Show the contents of a file in the console
fileName="msdocs-tutorial.json"
cat $fileName | jq

# Get a JSON dictionary object
stgKV=$(jq -r '.environments.stg."kv-secretName"' $fileName)
echo $stgKV

# Filter a JSON array
devKV=$(jq -r '.environments.dev[] | select(.status=="active") | ."kv-secretName"' $fileName)
echo $devKV

Haben Sie einen Fehler "jq command not found" erhalten? Dieser Fehler tritt auf, da das Skript vom Bash jq-Befehl abhängt. Installieren Sie jq in Ihrer Umgebung, oder führen Sie dieses Skript in Azure Cloud Shell aus.

Sie verfügen jetzt über einen umgebungsspezifischen geheimen Azure Key Vault-Namen, der in einer Variablen gespeichert ist, und Sie können ihn verwenden, um eine Verbindung mit Azure-Ressourcen herzustellen. Diese Methode eignet sich gut für IP-Adressen von Azure-VMs und SQL Server-Verbindungszeichenfolgen, wenn Sie Azure CLI-Skripts wiederverwenden möchten.

Weitere Details

Möchten Sie weitere Details zu einem der in diesem Tutorialschritt behandelten Themen? Weitere Informationen finden Sie unter den Links in dieser Tabelle:

Betreff Erfahren Sie mehr
Variablen Weitere Beispiele zur erfolgreichen Verwendung der Azure CLI – Übergeben von Werten an einen anderen Befehl
Lesen Sie eine gute Übersicht über Variablen in der Verwendung von Variablen in Azure CLI-Befehlen.
Abfragen Hier finden Sie eine Vielzahl von Beispielen in how to query Azure CLI command output using a JMESPath query.
Machen Sie einen tieferen Einblick in Bash mithilfe von --queryLearn, um Bash mit der Azure CLI zu verwenden.
Azure Key Vault Über Azure Key Vault
Ermöglichen Sie den Zugriff auf Schlüsseltresorschlüssel, Zertifikate und geheime Schlüssel mit einer rollenbasierten Zugriffssteuerung in Azure.
Häufige Fehlercodes für Azure Key Vault
PowerShell Referenzlinks: Get-content, Where-Object, Select-Object

Nächster Schritt

Nachdem Sie nun wissen, wie Sie Variablen zum Speichern von Azure CLI-Befehlsausgabe- und JSON-Eigenschaftswerten verwenden, fahren Sie mit dem nächsten Schritt fort, um zu erfahren, wie Sie Skripts zum Löschen von Azure-Ressourcen verwenden.