Exercício – consultar as informações do sistema e do runtime sobre a VM

Concluído

Agora que criamos uma máquina virtual, podemos obter informações sobre ela por meio de outros comandos.

Vamos começar por correr vm list.

az vm list

Este comando irá devolver todas as máquinas virtuais definidas nesta subscrição. Você pode filtrar a saída para um grupo de recursos específico através do --resource-group parâmetro.

Tipos de saída

Tenha em atenção que o tipo de resposta predefinida para todos os comandos que fizemos até agora é um JSON. Isso é ótimo para scripts, mas a maioria das pessoas acha mais difícil de ler. Pode alterar o estilo de saída para qualquer resposta através do sinalizador --output. Por exemplo, execute o seguinte comando no Azure Cloud Shell para ver o estilo de saída diferente.

az vm list --output table

Juntamente com table, pode especificar json (a predefinição), jsonc (JSON colorido) ou tsv (Valores Separados por Tabulação). Experimente algumas variações com o comando anterior para ver a diferença.

Obter o endereço IP

Outro comando útil é vm list-ip-addresseso , que lista os endereços IP públicos e privados de uma VM. Se forem alterados ou não os capturar durante a criação, pode obtê-los em qualquer altura.

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

Isso retorna saídas como:

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

Gorjeta

Observe que estamos usando uma sintaxe abreviada para o --output sinalizador como -o. Você pode encurtar a maioria dos parâmetros para comandos da CLI do Azure para um único traço e letra. Por exemplo, você pode encurtar --name para e --resource-group para -n-g. Isso é útil para inserir caracteres de teclado, mas recomendamos usar o nome completo da opção em scripts para maior clareza. Consulte a documentação para obter detalhes sobre cada comando.

Obter detalhes da VM

Podemos obter informações mais detalhadas sobre uma máquina virtual específica por nome ou ID executando o vm show comando.

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

Isso retorna um bloco JSON bastante grande com todos os tipos de informações sobre a VM, incluindo dispositivos de armazenamento conectados, interfaces de rede e todas as IDs de objeto para recursos aos quais a VM está conectada. Novamente, podemos alterar para um formato de tabela, mas isso omite quase todos os dados interessantes. Em vez disso, podemos utilizar uma linguagem de consulta incorporada para JSON denominada JMESPath.

Adicionar filtros a consultas com JMESPath

JMESPath é uma linguagem de consulta padrão do setor criada em torno de objetos JSON. A consulta mais simples é especificar um identificador que seleciona uma chave no objeto JSON.

Por exemplo, dado o objeto:

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

Podemos utilizar a consulta people para devolver a matriz de valores para a matriz people. Se queremos apenas uma das pessoas, podemos utilizar um indexador. Por exemplo, people[1] iria devolver:

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

Também podemos adicionar qualificadores específicos que iriam devolver um subconjunto dos objetos com base nos critérios. Por exemplo, adicionar o qualificador people[?age > '25'] iria devolver:

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

Por fim, pode restringir os resultados ao adicionar uma seleção: people[?age > '25'].[name] que devolve apenas os nomes:

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

JMESQuery tem várias outras funcionalidades interessantes da consulta. Quando tiver tempo, veja o tutorial online disponível no site JMESPath.org.

Filtrar suas consultas da CLI do Azure

Com uma compreensão básica das consultas JMES, podemos adicionar filtros aos dados retornados por consultas como o vm show comando. Por exemplo, podemos recuperar o nome de usuário do administrador:

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

Podemos obter o tamanho atribuído à nossa VM:

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

Ou, para recuperar todos os IDs para suas interfaces de rede, podemos executar a consulta:

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

Essa técnica de consulta funciona com qualquer comando da CLI do Azure e você pode usá-la para extrair bits específicos de dados na linha de comando. Também é útil para scripts. Por exemplo, você pode extrair um valor de sua conta do Azure e armazená-lo em um ambiente ou variável de script. Se você decidir usá-lo dessa forma, é útil adicionar o --output tsv parâmetro (que você pode encurtar para -o tsv). Isso retornará resultados que incluem apenas os valores de dados reais com separadores de tabulação.

Por exemplo:

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

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