Share via


Variabelen invullen voor gebruik in scripts

In deze zelfstudiestap leert u hoe u kunt werken met variabelen:

  • Voer een Azure CLI-opdracht uit en sla uitvoer op in een variabele.
  • Lees een lokaal JSON-bestand en sla eigenschapswaarden op in een variabele.

Enkele veelvoorkomende gebruiksvoorbeelden voor variabelen zijn:

  • Informatie ophalen over een bestaande Azure-resource, zoals een resource-id.
  • Uitvoer ophalen van een Azure CLI-opdracht, zoals een wachtwoord.
  • JSON-objecten ophalen voor omgevingsgegevens, zoals ontwikkeling, fase en productie-id's.

De variabele kan vervolgens worden gebruikt in Azure CLI om bouwtaken op schaal uit te voeren en te vernietigen.

Vereisten

  • U hebt toegang tot een resourcegroep en opslagaccount met reader of hogere machtigingen op opslagaccountniveau.

Opdrachtuitvoer ophalen met behulp van JMESPath-query

Informatie ophalen over een bestaande Azure-resource met behulp van de --query parameter van de show opdracht. Er wordt een JMESPath-query uitgevoerd en een of meer eigenschapswaarden van een Azure-resource worden geretourneerd.

Tip

De syntaxis voor --query is hoofdlettergevoelig en omgevingsspecifiek. Als u lege resultaten ontvangt, controleert u uw hoofdlettergebruik. Vermijd fouten door de regels toe te passen die u in Learn Azure CLI-syntaxisverschillen hebt geleerd in Bash, PowerShell en Cmd

Tenzij de --output parameter is opgegeven, zijn deze voorbeelden afhankelijk van een standaarduitvoerconfiguratie van json de set in Uw omgeving voorbereiden voor de Azure CLI

Eigenschappen van JSON-woordenlijst van een Azure-resource ophalen

Met behulp van het opslagaccount dat is gemaakt in Learn Azure CLI-syntaxisverschillen in Bash, PowerShell en Cmd, haalt u het primaryEndpoints nieuwe opslagaccount op.

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

Uitvoer van console-JSON-woordenlijst:

{
  "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/"
}

Afzonderlijke JSON-objecten ophalen

Geef een door komma's gescheiden lijst met eigenschappen van het opslagaccount op om afzonderlijke eigenschappen in een matrix (lijst) te retourneren.

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

Uitvoer van console-JSON-matrix:

[
  "/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"
]

De naam van eigenschappen wijzigen

Wijzig de naam van eigenschappen met accolades ({}) en een door komma's gescheiden lijst. De nieuwe eigenschapsnamen mogen geen spaties bevatten. In dit voorbeeld wordt uitvoer geretourneerd in table indeling.

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

Uitvoer van consoletabel. De eerste letter van elke kolom wordt in hoofdletters geplaatst in --output table:

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

Queryresultaten filteren

Combineer wat u hebt geleerd over quoteren met wat u zojuist hebt geleerd --query. In deze voorbeelden wordt een filter toegepast.

In Bash kunt u geen spatie voor of na het gelijkteken (=) hebben. U kunt ervoor kiezen om aanhalingstekens te gebruiken rond de variabele waarde, dus msdocs-tutorial-rg-00000000 en "msdocs-tutorial-rg-00000000" beide juist zijn.

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

Een nieuwe Azure-resource maken waarin uitvoer in een variabele wordt opgeslagen

Het is nuttig om opdrachtuitvoer op te slaan in een variabele bij het maken van Azure-resources die geheimen uitvoeren die moeten worden beveiligd. Wanneer u bijvoorbeeld een service-principal maakt, een referentie opnieuw instelt of een Azure-sleutelkluisgeheim ophaalt, moet de uitvoer van de opdracht worden beveiligd.

Maak een nieuwe Azure Key Vault en geheim voor het retourneren van opdrachtuitvoer naar een variabele. Uw Azure Key Vault-naam moet wereldwijd uniek zijn, dus de $RANDOM id wordt in dit voorbeeld gebruikt. Zie Algemene foutcodes voor Azure Key Vault voor meer naamgevingsregels voor Azure Key Vault.

Deze voorbeelden gebruiken echo om variabele waarden te verifiëren, omdat dit een leszelfstudie is. Gebruik dit niet echo voor geheime en wachtwoordwaarden in omgevingen op productieniveau.

# 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 Kev 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

De inhoud van een JSON-bestand ophalen en opslaan in een variabele

Deze volgende sectie is een stretch-taak voor een zelfstudie over onboarding. Voor het beheren van Azure-resources in ontwikkel-, fase- en productieomgevingen moet u vaak een configuratiebestand lezen.

Bent u klaar om uw Azure CLI-vaardigheden uit te rekken? Maak een JSON-bestand met de volgende JSON of de gewenste bestandsinhoud. Sla het tekstbestand op uw lokale station op. Als u in Azure Cloud Shell werkt, gebruikt u het upload/download files pictogram in de menubalk om het tekstbestand op te slaan in uw cloudopslagstation.

{
  "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"
    }
  }
}

Sla de inhoud van uw JSON-bestand op in een variabele voor verder gebruik in uw Azure CLI-opdrachten. In dit voorbeeld wijzigt msdocs-tutorial.json u de naam van het bestand. Sla de echo opdracht niet op in scripts op productieniveau, omdat de uitvoer wordt opgeslagen in het logboekbestand.

Dit Bash-script is getest in Azure Cloud Shell en is afhankelijk van de Bash-jqdie in uw omgeving moet worden geïnstalleerd.

# 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

Hebt u zojuist de fout 'jq-opdracht niet gevonden' ontvangen? Dit komt omdat dit script afhankelijk is van de Bash jq-opdracht . Installeer jq in uw omgeving of voer dit script uit in Azure Cloud Shell.

U hebt nu een omgevingsspecifieke azure Key Vault-geheime naam die is opgeslagen in een variabele en u kunt deze gebruiken om verbinding te maken met Azure-resources. Deze methode is ook geschikt voor IP-adressen van Azure-VM's en SQL Server-verbindingsreeks s wanneer u Azure CLI-scripts opnieuw wilt gebruiken.

Meer informatie

Wilt u meer informatie over een van de onderwerpen die in deze zelfstudiestap worden behandeld? Gebruik de koppelingen in deze tabel voor meer informatie.

Onderwerp Meer informatie
Variabelen Zie geavanceerde voorbeelden in De Azure CLI gebruiken : waarden doorgeven aan een andere opdracht
Lees een goed overzicht van variabelen in Het gebruik van variabelen in Azure CLI-opdrachten.
Uitvoeren van query's Zoek een breed scala aan voorbeelden in Het uitvoeren van query's op Azure CLI-opdrachtuitvoer met behulp van een JMESPath-query.
Ga dieper in op Bash met behulp van --queryLearn om Bash te gebruiken met de Azure CLI.
Azure Key Vault Info over Azure Key Vault
Toegang bieden tot Key Vault-sleutels, -certificaten en -geheimen met een op rollen gebaseerd toegangsbeheer van Azure.
Veelvoorkomende foutcodes voor Azure Key Vault
Powershell Naslagkoppelingen: Get-content, Where-Object, Select-Object

Volgende stap

Nu u begrijpt hoe u variabelen gebruikt om uitvoer van Azure CLI-opdrachten en JSON-eigenschapswaarden op te slaan, gaat u verder met de volgende stap om te leren hoe u scripts gebruikt om Azure-resources te verwijderen.