Compartir a través de


Rellenar variables para su uso en scripts de la CLI de Azure

En este paso del tutorial, aprenderá a trabajar con variables:

  • Ejecute un comando de la CLI de Azure y almacene la salida en una variable.
  • Lea un archivo JSON local y almacene los valores de propiedad en una variable.

Algunos casos de uso comunes para las variables son:

  • Obtenga información sobre un recurso de Azure existente, como un identificador de recurso.
  • Obtenga la salida de un comando de la CLI de Azure, como una contraseña.
  • Obtenga objetos JSON para obtener información del entorno, como los identificadores de desarrollo, fase y producción.

Puede usar la variable en la CLI de Azure para realizar operaciones de compilación y destrucción a escala.

Prerrequisitos

  • Tiene acceso a un grupo de recursos y una cuenta de almacenamiento con reader o permisos superiores a nivel de cuenta de almacenamiento.

Obtención de la salida del comando mediante la consulta JMESPath

Obtenga información sobre un recurso de Azure existente mediante el --query parámetro del show comando . Se ejecuta una consulta JMESPath y se devuelven uno o varios valores de propiedad de un recurso de Azure.

Sugerencia

La sintaxis de --query distingue mayúsculas de minúsculas y es específica del entorno. Si obtiene resultados vacíos, revise el uso de mayúsculas. Evite los errores de comillas aplicando las reglas que aprendió en Aprenda las diferencias de sintaxis de la CLI de Azure en Bash, PowerShell y Cmd.

A menos que se especifique el parámetro --output, estos ejemplos dependen de una configuración de salida predeterminada establecida en json del .

Obtención de propiedades de diccionario JSON de un recurso de Azure

Con la cuenta de almacenamiento creada en Aprender las diferencias de sintaxis de la CLI de Azure en Bash, PowerShell y Cmd, obtenga los detalles de su nueva cuenta de almacenamiento.

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

Salida del diccionario JSON de la consola:

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

Obtención de objetos JSON individuales

Para devolver propiedades individuales en una matriz (lista), especifique una lista delimitada por comas de las propiedades de la cuenta de almacenamiento.

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

Salida de la matriz JSON de la consola:

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

Cambiar el nombre de las propiedades

Cambie el nombre de las propiedades mediante corchetes () y una lista delimitada por comas{}. Los nuevos nombres de propiedad no pueden contener espacios. En este ejemplo se devuelve la salida en table formato.

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

Salida de la tabla de consola. La primera letra de cada columna se escribe en mayúsculas en --output table:

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

Filtrar los resultados de la consulta

Combine lo que ha aprendido sobre las citas con lo que acaba de aprender sobre --query. Estos ejemplos aplican un filtro.

En Bash, no puede tener un espacio antes o después del signo igual (=). Puede optar por usar comillas alrededor del valor de la variable, por lo que msdocs-tutorial-rg-00000000 y "msdocs-tutorial-rg-00000000" son correctas.

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

Creación de un nuevo recurso de Azure que almacena la salida en una variable

El aprendizaje para almacenar la salida de comandos en una variable es beneficioso al crear recursos de Azure que generen secretos que se deben proteger. Por ejemplo, al crear una entidad de servicio, restablecer una credencial u obtener un secreto de Azure Key Vault, la salida del comando debería estar protegida.

Cree un nuevo almacén de claves de Azure y un secreto y devuelva la salida del comando a una variable. El nombre de Azure Key Vault debe ser único globalmente, por lo que el $RANDOM identificador se usa en este ejemplo. Para más reglas de nomenclatura de Azure Key Vault, consulte Códigos de error comunes para Azure Key Vault.

Estos ejemplos usan echo para comprobar los valores de variable porque se trata de un tutorial de enseñanza. No use echo para los valores de secreto y contraseña en entornos de nivel de producción.

# 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

Obtener el contenido de un archivo JSON y almacenarlo en una variable

La siguiente sección es una "tarea desafiante" para un tutorial de introducción. Sin embargo, para administrar los recursos de Azure en entornos de desarrollo, fase y producción, a menudo es necesario leer un archivo de configuración.

¿Está listo para ampliar las aptitudes de la CLI de Azure? Cree un archivo JSON que contenga el siguiente JSON o el contenido del archivo que prefiera. Guarde el archivo de texto en la unidad local. Si trabaja en Azure Cloud Shell, use el upload/download files icono de la barra de menú para almacenar el archivo de texto en su unidad de almacenamiento en la nube.

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

Almacene el contenido del archivo JSON en una variable para su uso adicional en los comandos de la CLI de Azure. En este ejemplo, cambie msdocs-tutorial.json por el nombre del archivo. No guarde el echo comando en scripts de nivel de producción, ya que la salida se guarda en el archivo de registro.

El siguiente script de Bash se probó en Azure Cloud Shell y depende de Bash jq, que debe instalarse en su entorno.

# 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

¿Recibió un error de "comando jq no encontrado"? Este error se produce porque el script depende del comando jq de Bash. Instale jq en su entorno o ejecute este script en Azure Cloud Shell.

Ahora tiene un nombre secreto de Azure Key Vault específico del entorno almacenado en una variable y puede usarlo para conectarse a los recursos de Azure. Este mismo método es adecuado para las direcciones IP de las máquinas virtuales de Azure y las cadenas de conexión de SQL Server cuando desea reutilizar los scripts de la CLI de Azure.

Obtenga más detalles

¿Desea obtener más detalles sobre uno de los temas tratados en este paso del tutorial? Use los vínculos de esta tabla para obtener más información.

Asunto Aprende más
variables Consulte ejemplos avanzados en Uso correcto de la CLI de Azure: Paso de valores a otro comando
Lea una buena introducción a las variables en Uso de variables en los comandos de la CLI de Azure.
Consultas Busque una amplia gama de ejemplos en Cómo consultar la salida del comando de la CLI de Azure mediante una consulta JMESPath.
Profundice en Bash mediante --query en Learn to use Bash with the Azure CLI (Aprender a usar Bash con la CLI de Azure).
Bóveda de claves de Azure Acerca de Azure Key Vault
Proporcione acceso a claves, certificados y secretos de Key Vault con un control de acceso basado en rol de Azure.
Códigos de error comunes para Azure Key Vault
PowerShell Vínculos de referencia: Get-content, Where-Object, Select-Object

Paso siguiente

Ahora que comprende cómo usar variables para almacenar la salida del comando de la CLI de Azure y los valores de propiedad JSON, continúe con el paso siguiente para aprender a usar scripts para eliminar recursos de Azure.