Preencher variáveis para uso em scripts

Nesta etapa do 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 de informações do ambiente, como IDs de desenvolvimento, preparação e produção.

Em seguida, a variável pode ser usada na CLI do Azure para executar trabalhos de build e destruição em escala.

Pré-requisitos

  • Você tem acesso a um grupo de recursos e uma conta de armazenamento com reader ou permissões mais altas no 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 --query do comando show. Uma consulta JMESPath é executada e um ou mais valores de propriedade de um recurso do Azure são retornados.

Dica

A sintaxe do --query diferencia maiúsculas de minúsculas e é específica do ambiente. Se você receber resultados vazios, verifique se usou a capitalização correta. Evite erros de aspas aplicando as regras que você aprendeu em Conheça as diferenças de sintaxe da CLI do Azure no Bash, PowerShell e Cmd

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

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

Usando a conta de armazenamento criada em Conheça as diferenças de sintaxe da CLI do Azure no Bash, PowerShell e Cmd, obtenha os 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 no 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 das propriedades da 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 no 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írgulas. Os novos nomes de propriedade não podem conter espaços. Este exemplo retorna a saída em formato table.

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 de console. A primeira letra de cada coluna é maiúscula no --output table:

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

Filtrar resultados da consulta

Combine o que você aprendeu sobre aspas com o que acabou de aprender sobre --query. Esses 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" 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 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 se você estiver criando 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 no cofre de chaves do Azure, a saída do comando deve ser protegida.

Crie um Azure Key Vault e um segredo que retorna a saída de comando em uma variável. O nome do Azure Key Vault deve ser globalmente exclusivo, portanto, o identificador $RANDOM é usado neste exemplo. Para conhecer mais regras de nomenclatura do Azure Key Vault, consulte Códigos de erro comuns no Azure Key Vault.

Esses exemplos usam echo para verificar valores de variáveis porque este é um tutorial de ensino. Não use echo como valor de segredo e senha em ambientes 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, preparação e produção, você geralmente precisa ler um arquivo de configuração.

Você está pronto para ampliar suas habilidades com a CLI do Azure? Crie um arquivo JSON contendo o JSON a seguir ou o conteúdo de sua escolha. Salve o arquivo de texto na unidade local. Se você estiver trabalhando no Azure Cloud Shell, use o ícone upload/download files na barra de menus para armazenar o 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 nos comandos da CLI do Azure. Neste exemplo, altere msdocs-tutorial.json para o nome do arquivo. Não salve o comando echo em scripts de nível de produção, pois a saída é salva no arquivo de log.

Esse script do Bash foi testado no Azure Cloud Shell e depende do jq do Bash, 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 jq do Bash. Instale o jq em seu ambiente ou execute esse script no Azure Cloud Shell.

Agora você tem um nome de segredo do Azure Key Vault específico do ambiente armazenado em uma variável e pode usá-lo para se conectar aos recursos do Azure. Esse mesmo método serve 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

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

Assunto Saiba 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 em comandos da CLI do Azure.
Consultas Encontre uma ampla variedade de exemplos em Como consultar a saída de comando da CLI do Azure usando uma consulta JMESPath.
Obtenha mais detalhes do Bash para usar --query em Aprenda a usar o Bash com a CLI do Azure.
Cofre de chaves do Azure Sobre o Azure Key Vault
Fornecer acesso a chaves, certificados e segredos do Key Vault com um controle de acesso baseado em função do Azure.
Códigos de erro comuns do Azure Key Vault
PowerShell Links de referência: Get-content, Where-Object, Select-Object

Próxima Etapa

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