Fylla i variabler för användning i skript
I det här självstudiesteget lär du dig att arbeta med variabler:
- Kör ett Azure CLI-kommando och lagra utdata i en variabel.
- Läs en lokal JSON-fil och lagra egenskapsvärden i en variabel.
Några vanliga användningsfall för variabler är:
- Hämta information om en befintlig Azure-resurs, till exempel ett resurs-ID.
- Hämta utdata från ett Azure CLI-kommando, till exempel ett lösenord.
- Hämta JSON-objekt för miljöinformation, till exempel utvecklings-, fas- och produktions-ID:er.
Variabeln kan sedan användas i Azure CLI för att utföra bygg- och förstör-jobb i stor skala.
Förutsättningar
- Du har åtkomst till en resursgrupp och ett lagringskonto med
reader
eller högre behörigheter på lagringskontonivå.
Hämta kommandoutdata med JMESPath-fråga
Hämta information om en befintlig Azure-resurs med hjälp av parametern --query
för show
kommandot. En JMESPath-fråga körs och ett eller flera egenskapsvärden för en Azure-resurs returneras.
Dricks
Syntaxen för --query
är skiftlägeskänslig och miljöspecifik. Om du får tomma resultat kontrollerar du versaler. Undvik att citera fel genom att tillämpa de regler som du har lärt dig i Learn Azure CLI-syntaxskillnader i Bash, PowerShell och Cmd
Om inte parametern --output
anges förlitar sig de här exemplen på en standardkonfiguration för json
utdata som anges i Förbereda din miljö för Azure CLI
Hämta JSON-ordlisteegenskaper för en Azure-resurs
Använd lagringskontot som skapats i Learn Azure CLI-syntaxskillnader i Bash, PowerShell och Cmd och hämta primaryEndpoints
det nya lagringskontot.
az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
--name <msdocssa000000000> \
--query primaryEndpoints
JSON-ordlisteutdata för konsolen:
{
"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/"
}
Hämta enskilda JSON-objekt
Ange en kommaavgränsad lista över lagringskontoegenskaper för att returnera enskilda egenskaper i en matris (lista).
az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
--name <msdocssa000000000> \
--query "[id, primaryLocation, primaryEndpoints.blob, encryption.services.blob.lastEnabledTime]"
Konsol-JSON-matrisutdata:
[
"/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"
]
Byt namn på egenskaper
Byt namn på egenskaper med hjälp av klammerparenteser ({}
) och en kommaavgränsad lista. De nya egenskapsnamnen får inte innehålla blanksteg. Det här exemplet returnerar utdata i table
format.
az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
--name <msdocssa000000000> \
--query "{saName:name, saKind:kind, saMinTLSVersion:minimumTlsVersion}" \
--output table
Konsoltabellutdata. Den första bokstaven i varje kolumn är versal i --output table
:
SaName SaKind SaMinTLSversion
----------------- --------- -----------------
msdocssa000000000 StorageV2 TLS1_0
Filtrera frågeresultat
Kombinera det du har lärt dig om att citera med det du just har lärt dig om --query
. De här exemplen använder ett filter.
I Bash kan du inte ha ett blanksteg före eller efter likhetstecknet (=
). Du kan välja att använda citattecken runt variabelvärdet, så msdocs-tutorial-rg-00000000
och "msdocs-tutorial-rg-00000000"
båda är korrekta.
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
Skapa en ny Azure-resurs som lagrar utdata i en variabel
Att lära sig lagra kommandoutdata i en variabel är fördelaktigt när du skapar Azure-resurser som utdatahemligheter som ska skyddas. När du till exempel skapar ett huvudnamn för tjänsten, återställer en autentiseringsuppgift eller hämtar en Azure-nyckelvalvshemlighet bör kommandoutdata skyddas.
Skapa ett nytt Azure Key Vault och en hemlighet som returnerar kommandoutdata till en variabel. Ditt Azure Key Vault-namn måste vara globalt unikt, så identifieraren $RANDOM
används i det här exemplet. Mer information om namngivningsregler för Azure Key Vault finns i Vanliga felkoder för Azure Key Vault.
De här exemplen används echo
för att verifiera variabelvärden eftersom det här är en undervisningskurs. Använd inte echo
för hemlighets- och lösenordsvärden i miljöer på produktionsnivå.
# 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
Hämta innehållet i en JSON-fil och lagra den i en variabel
Nästa avsnitt är en "stretchuppgift" för en introduktionskurs. Men för att hantera Azure-resurser i utvecklings-, fas- och produktionsmiljöer behöver du ofta läsa en konfigurationsfil.
Är du redo att utöka dina Azure CLI-kunskaper? Skapa en JSON-fil som innehåller följande JSON eller valfritt filinnehåll. Spara textfilen på den lokala enheten. Om du arbetar i Azure Cloud Shell använder du upload/download files
ikonen i menyraden för att lagra textfilen på molnlagringsenheten.
{
"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"
}
}
}
Lagra innehållet i JSON-filen i en variabel för ytterligare användning i dina Azure CLI-kommandon. I det här exemplet ändrar du msdocs-tutorial.json
till namnet på filen. Spara inte kommandot i skript på echo
produktionsnivå eftersom utdata sparas i loggfilen.
Det här Bash-skriptet testades i Azure Cloud Shell och är beroende av Bash jq som måste installeras i din miljö.
# 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
Fick du just felet "jq-kommandot hittades inte"? Det beror på att det här skriptet är beroende av Bash jq-kommandot . Installera jq i din miljö eller kör det här skriptet i Azure Cloud Shell.
Nu har du ett miljöspecifikt Hemligt Azure Key Vault-namn som lagras i en variabel och du kan använda det för att ansluta till Azure-resurser. Samma metod är bra för IP-adresser för virtuella Azure-datorer och SQL Server-niska veze när du vill återanvända Azure CLI-skript.
Få mer information
Vill du ha mer information om något av de ämnen som beskrivs i det här självstudiesteget? Använd länkarna i den här tabellen om du vill veta mer.
Ämne | Läs mer |
---|---|
Variabler | Se avancerade exempel i Använda Azure CLI – Skicka värden till ett annat kommando |
Läs en bra översikt över variabler i Använda variabler i Azure CLI-kommandon. | |
Fråga | Hitta ett brett utbud av exempel i Köra frågor mot Azure CLI-kommandoutdata med hjälp av en JMESPath-fråga. |
Ta en djupare titt i Bash med hjälp av --query i Learn för att använda Bash med Azure CLI. |
|
Azure Key Vault | Om Azure Key Vault |
Ge åtkomst till Key Vault-nycklar, certifikat och hemligheter med en rollbaserad åtkomstkontroll i Azure. | |
Vanliga felkoder för Azure Key Vault | |
PowerShell | Referenslänkar: Get-content, Where-Object, Select-Object |
Nästa steg
Nu när du förstår hur du använder variabler för att lagra Azure CLI-kommandoutdata och JSON-egenskapsvärden går du vidare till nästa steg för att lära dig hur du använder skript för att ta bort Azure-resurser.