Ejercicio: Consulta de la información del sistema y del entorno en tiempo de ejecución sobre la máquina virtual

Completado

Ahora que hemos creado una máquina virtual, podemos obtener información sobre ella a través de otros comandos.

Para empezar, ejecute vm list.

az vm list

Este comando devolverá todas las máquinas virtuales definidas en esta suscripción. La salida se puede filtrar a un grupo de recursos específico mediante el parámetro --resource-group.

Tipos de salida

Tenga en cuenta que el tipo de respuesta predeterminada para todos los comandos que hemos realizado hasta ahora es JSON. Esto es fantástico para los scripts, pero para la mayoría de las personas es más difícil de leer. Puede cambiar el estilo de salida de todas las respuestas a través de la marca --output. Por ejemplo, ejecute el comando siguiente en Azure Cloud Shell para ver el otro estilo de salida.

az vm list --output table

Junto con table, puede especificar json (el valor predeterminado), jsonc (JSON coloreado) o tsv (valores separados por tabulaciones). Pruebe algunas variaciones con el comando anterior para ver la diferencia.

Obtención de la dirección IP

Otro comando útil es vm list-ip-addresses, que enumera las direcciones IP públicas y privadas de una máquina virtual. Si cambian o no las capturó durante la creación, puede recuperarlas en cualquier momento.

az vm list-ip-addresses -n SampleVM -o table

Esto devuelve una salida como la siguiente:

VirtualMachine    PublicIPAddresses    PrivateIPAddresses
----------------  -------------------  --------------------
SampleVM          168.61.54.62         10.0.0.4

Sugerencia

Tenga en cuenta que estamos usando una sintaxis abreviada para la marca --output como -o. La mayoría de los parámetros de los comandos de la CLI de Azure se pueden abreviar como un solo guion y una letra. Por ejemplo, puede abreviar --name a -n y --resource-group a -g. Esto resulta útil para escribir caracteres del teclado, pero en los scripts se recomienda usar el nombre completo de la opción para mayor claridad. Consulte la documentación para obtener más detalles sobre cada comando.

Obtención de los detalles de la máquina virtual

Es posible obtener información más detallada sobre una máquina virtual concreta por nombre o identificador si se ejecuta el comando vm show.

az vm show --resource-group <rgn>[sandbox resource group name]</rgn> --name SampleVM

Esto devuelve un bloque JSON bastante grande con todo tipo de información sobre la máquina virtual, incluidos los dispositivos de almacenamiento conectados, las interfaces de red y todos los identificadores de objeto para los recursos a los que está conectada la máquina virtual. Nuevamente, podríamos cambiar a un formato de tabla, pero eso omite prácticamente todos los datos de interés. En su lugar, podemos volver a un lenguaje de consulta integrada de JSON llamado JMESPath.

Incorporación de filtros a consultas con JMESPath

JMESPath es un lenguaje de consulta estándar del sector creado en torno a los objetos JSON. La consulta más sencilla consiste en especificar un identificador que selecciona una clave en el objeto JSON.

Por ejemplo, dado el objeto:

{
  "people": [
    {
      "name": "Fred",
      "age": 28
    },
    {
      "name": "Barney",
      "age": 25
    },
    {
      "name": "Wilma",
      "age": 27
    }
  ]
}

Podemos usar la consulta people para devolver la matriz de valores para la matriz people. Si solo queremos una de las personas, podemos usar un indexador. Por ejemplo, people[1] devolvería:

{
    "name": "Barney",
    "age": 25
}

También podemos agregar calificadores específicos que devuelven un subconjunto de los objetos en función de algunos criterios. Por ejemplo, agregar el calificador people[?age > '25'] devolvería:

[
  {
    "name": "Fred",
    "age": 28
  },
  {
    "name": "Wilma",
    "age": 27
  }
]

Por último, los resultados se pueden restringir si se agrega una instrucción select: people[?age > '25'].[name] que devuelve solo los nombres:

[
  [
    "Fred"
  ],
  [
    "Wilma"
  ]
]

JMESQuery tiene varias otras características de consulta interesantes. Cuando tenga tiempo, consulte el tutorial en línea disponible en el sitio JMESPath.org.

Filtrado de las consultas de la CLI de Azure

Con un conocimiento básico de las consultas JMES, podemos agregar filtros a los datos devueltos por las consultas, como el comando vm show. Por ejemplo, se puede recuperar el nombre de usuario del administrador:

az vm show \
    --resource-group <rgn>[sandbox resource group name]</rgn> \
    --name SampleVM \
    --query "osProfile.adminUsername"

Podemos obtener el tamaño asignado a la máquina virtual:

az vm show \
    --resource-group <rgn>[sandbox resource group name]</rgn> \
    --name SampleVM \
    --query hardwareProfile.vmSize

O bien, para recuperar todos los identificadores de las interfaces de red, podemos ejecutar la consulta:

az vm show \
    --resource-group <rgn>[sandbox resource group name]</rgn> \
    --name SampleVM \
    --query "networkProfile.networkInterfaces[].id"

Esta técnica de consulta funciona con cualquier comando de la CLI de Azure y se puede usar para extraer elementos específicos de datos en la línea de comandos. También es útil para los scripts. Por ejemplo, puede extraer un valor de la cuenta de Azure y almacenarlo en una variable de entorno o script. Si decide usarlo de esta manera, es útil agregar el parámetro --output tsv (que se puede abreviar como -o tsv). Esto devolverá resultados que solo incluyen los valores de datos reales con separadores de tabulación.

Por ejemplo:

az vm show \
    --resource-group <rgn>[sandbox resource group name]</rgn> \
    --name SampleVM \
    --query "networkProfile.networkInterfaces[].id" -o tsv

devuelve el texto: /subscriptions/20f4b944-fc7a-4d38-b02c-900c8223c3a0/resourceGroups/2568d0d0-efe3-4d04-a08f-df7f009f822a/providers/Microsoft.Network/networkInterfaces/SampleVMVMNic