Preencher variáveis para uso em scripts

Nesta etapa tutorial, aprenda a trabalhar com variáveis:

  • Execute um comando da CLI do Azure e armazene a saída em uma variável.
  • Leia um arquivo JSON local e armazene valores de propriedade em uma variável.

Alguns casos de uso comuns para variáveis são:

  • Obtenha informações sobre um recurso existente do Azure, como uma ID de recurso.
  • Obtenha a saída de um comando da CLI do Azure, como uma senha.
  • Obtenha objetos JSON para obter informações de ambiente, como IDs de desenvolvimento, estágio e produção.

A variável pode ser usada na CLI do Azure para executar trabalhos de compilação e destruição em escala.

Pré-requisitos

  • Você tem acesso a um grupo de recursos e a uma conta de armazenamento com reader permissões ou superiores em um nível de conta de armazenamento.

Obter saída de comando usando a consulta JMESPath

Obtenha informações sobre um recurso existente do Azure usando o parâmetro do --queryshow comando. Uma consulta JMESPath é executada e um ou mais valores de propriedade de um recurso do Azure são retornados.

Gorjeta

A sintaxe para --query diferencia maiúsculas de minúsculas e é específica do ambiente. Se receber resultados vazios, verifique a capitalização. Evite erros de citação aplicando as regras aprendidas em Aprenda as diferenças de sintaxe da CLI do Azure em Bash, PowerShell e Cmd

A menos que o --output parâmetro seja especificado, esses exemplos dependem de uma configuração de saída padrão definida json em Preparar seu ambiente para a CLI do Azure

Obter propriedades do dicionário JSON de um recurso do Azure

Usando a conta de armazenamento criada em Aprenda as diferenças de sintaxe da CLI do Azure em Bash, PowerShell e Cmd, obtenha a primaryEndpoints da sua nova conta de armazenamento.

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

Saída do dicionário JSON do console:

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

Obter objetos JSON individuais

Especifique uma lista delimitada por vírgulas de propriedades de conta de armazenamento para retornar propriedades individuais em uma matriz (lista).

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

Saída da matriz JSON do console:

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

Renomear propriedades

Renomeie as propriedades usando colchetes ({}) e uma lista delimitada por vírgula. Os novos nomes de propriedade não podem conter espaços. Este exemplo retorna a saída em table formato.

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

Saída da tabela do console. A primeira letra de cada coluna está em maiúsculas em --output table:

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

Filtrar resultados da consulta

Combine o que você aprendeu sobre citação com o que você acabou de aprender sobre --query. Estes exemplos aplicam um filtro.

No Bash, você não pode ter um espaço antes ou depois do sinal de igual (=). Você pode optar por usar aspas em torno do valor da variável, portanto msdocs-tutorial-rg-00000000 , e "msdocs-tutorial-rg-00000000" ambos estão corretos.

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

Criar uma nova saída de armazenamento de recursos do Azure em uma variável

Aprender a armazenar a saída do comando em uma variável é benéfico ao criar recursos do Azure que geram segredos que devem ser protegidos. Por exemplo, quando você cria uma entidade de serviço, redefine uma credencial ou obtém um segredo do cofre de chaves do Azure, a saída do comando deve ser protegida.

Crie um novo Cofre de Chaves do Azure e secreto retornando a saída do comando para uma variável. Seu nome do Cofre da Chave do Azure deve ser globalmente exclusivo, portanto, o $RANDOM identificador é usado neste exemplo. Para obter mais regras de nomenclatura do Azure Key Vault, consulte Códigos de erro comuns para o Azure Key Vault.

Estes exemplos são usados echo para verificar valores de variáveis porque este é um tutorial de ensino. Não use echo para valores secretos e de senha em ambientes de nível de produção.

# 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

Obter o conteúdo de um arquivo JSON e armazená-lo em uma variável

Esta próxima seção é uma "tarefa de alongamento" para um tutorial de integração. No entanto, para gerenciar recursos do Azure em ambientes de desenvolvimento, estágio e produção, muitas vezes você precisa ler um arquivo de configuração.

Você está pronto para ampliar suas habilidades da CLI do Azure? Crie um arquivo JSON contendo o seguinte JSON ou o conteúdo do arquivo de sua escolha. Salve o arquivo de texto em sua unidade local. Se você estiver trabalhando no Azure Cloud Shell, use o ícone na barra de menus para armazenar o upload/download files arquivo de texto em sua unidade de armazenamento em nuvem.

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

Armazene o conteúdo do arquivo JSON em uma variável para uso posterior em seus comandos da CLI do Azure. Neste exemplo, altere msdocs-tutorial.json para o nome do arquivo. Não salve o echo comando em scripts de nível de produção, pois a saída é salva no arquivo de log.

Esse script Bash foi testado no Azure Cloud Shell e depende do Bash jq que deve ser instalado em seu ambiente.

# 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

Você acabou de receber um erro "comando jq não encontrado"? Isso ocorre porque esse script depende do comando Bash jq . Instale o jq em seu ambiente ou execute esse script no Azure Cloud Shell.

Agora você tem um nome secreto do Cofre da Chave do Azure específico do ambiente armazenado em uma variável e pode usá-lo para se conectar aos recursos do Azure. Esse mesmo método é bom para endereços IP de VMs do Azure e cadeias de conexão do SQL Server quando você deseja reutilizar scripts da CLI do Azure.

Obtenha mais detalhes

Quer mais detalhes sobre um dos assuntos abordados nesta etapa do tutorial? Use os links nesta tabela para saber mais.

Assunto Saber mais
Variáveis Veja exemplos avançados em Usar a CLI do Azure com êxito - Passar valores para outro comando
Leia uma boa visão geral das variáveis em Como usar variáveis nos comandos da CLI do Azure.
A consultar Encontre uma ampla variedade de exemplos em Como consultar a saída do comando CLI do Azure usando uma consulta JMESPath.
Aprofunde-se no Bash usando --query o Learn to use o Bash com a CLI do Azure.
Cofre de chaves do Azure Sobre o Azure Key Vault
Forneça acesso a chaves, certificados e segredos do Cofre da Chave com um controle de acesso baseado em função do Azure.
Códigos de erro comuns para o Azure Key Vault
PowerShell Links de referência: Get-content, Where-Object, Select-Object

Passo Seguinte

Agora que você entende como usar variáveis para armazenar a saída do comando da CLI do Azure e os valores da propriedade JSON, prossiga para a próxima etapa para saber como usar scripts para excluir recursos do Azure.