Rellenar variables para su uso en scripts
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.
Después, la variable se puede usar en la CLI de Azure para realizar trabajos de compilación y destrucción a escala.
Requisitos previos
- Tiene acceso a un grupo de recursos y una cuenta de almacenamiento con
reader
o permisos superiores en un 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 parámetro --query
del comando show
. 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 recibe resultados vacíos, compruebe el uso de mayúsculas. Evite los errores de comillas aplicando las reglas que ha aprendido en Obtenga información acerca de 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 se basan en una configuración de salida predeterminada de json
establecida en Preparar el entorno para la CLI de Azure.
Obtención de propiedades de diccionario JSON de un recurso de Azure
Con la cuenta de almacenamiento creada en Obtenga información acerca de las diferencias de sintaxis de la CLI de Azure en Bash, PowerShell y Cmd, obtenga el valor primaryEndpoints
de la 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
Especifique una lista delimitada por comas de las propiedades de la cuenta de almacenamiento para devolver propiedades individuales en una matriz (lista).
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 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 formato table
.
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 comillas 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 debe protegerse.
Cree una instancia de Azure Key Vault y un secreto que devuelva la salida del comando a una variable. El nombre de Azure Key Vault debe ser único globalmente, por lo que el identificador $RANDOM
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 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
Obtener el contenido de un archivo JSON y almacenarlo en una variable
Esta sección siguiente es una "tarea de extensión" para un tutorial de incorporació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 icono de upload/download files
de la barra de menús para almacenar el archivo de texto en la 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 comando echo
en scripts de nivel de producción, ya que la salida se guarda en el archivo de registro.
Este script de Bash se ha probado en Azure Cloud Shell y depende de jq de Bash 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
¿Acaba de recibir un error de "comando jq no encontrado"? Esto se debe a que este 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 | Más información |
---|---|
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 Aprendizaje de Bash mediante la CLI de Azure. |
|
Azure Key Vault | Acerca de Azure Key Vault |
Acceso a las 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 |
siguiente paso
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.