Exercício – Consultar informações do sistema e de 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 executando vm list.

az vm list

Esse comando retornará todas as máquinas virtuais definidas nessa assinatura. Você pode filtrar a saída para um grupo de recursos específico por meio do parâmetro --resource-group.

Tipos de saída

Observe que o tipo de resposta padrão para todos os comandos que fizemos até agora foi o JSON. Isso é ótimo para o script, mas a maioria das pessoas acha que ele é mais difícil de ser lido. Você pode alterar o estilo de saída para qualquer resposta por meio do sinalizador --output. Por exemplo, execute o comando a seguir no Azure Cloud Shell para ver o estilo de saída diferente.

az vm list --output table

Junto com table, você pode especificar json (o padrão), jsonc (JSON colorido) ou tsv (valores separados por tabulação). Experimente usar algumas variações com o comando anterior para ver a diferença.

Obter o endereço IP

Outro comando útil é vm list-ip-addresses, que lista os endereços IP públicos e privados de uma VM. Se eles forem alterados ou se não forem capturados durante a criação, você poderá recuperá-los a qualquer momento.

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

Isso retorna uma saída como:

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

Dica

Observe que estamos usando uma sintaxe abreviada do sinalizador --output como -o. Você pode abreviar a maioria dos parâmetros para comandos da CLI do Azure como um único traço e uma única letra. Por exemplo, você pode abreviar --name como -n e --resource-group como -g. Isso é útil para digitar caracteres do teclado, mas recomendamos o uso do nome de opção completo em scripts para maior clareza. Verifique 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 comando vm show.

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 anexados, adaptadores de rede e todas as IDs de objeto para os recursos aos quais a VM está conectada. Novamente, podemos alterá-lo para um formato de tabela, mas isso omite quase todos os dados interessantes. Em vez disso, podemos recorrer a uma linguagem de consulta interna do JSON chamada JMESPath.

Adicionar filtros a consultas com o JMESPath

O 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, considerando o objeto:

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

Podemos usar a consulta people para retornar a matriz de valores para a matriz people. Se apenas desejamos obter uma das pessoas, podemos usar um indexador. Por exemplo, people[1] retornará:

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

Também podemos adicionar qualificadores específicos que retornam um subconjunto dos objetos com base em alguns critérios. Por exemplo, adicionar o qualificador people[?age > '25'] retornará:

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

Por fim, podemos restringir os resultados com a adição de uma seleção: people[?age > '25'].[name], que retorna apenas os nomes:

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

O JMESQuery tem vários outros recursos de consulta interessantes. Quando tiver tempo, confira o tutorial online disponível no site JMESPath.org.

Filtrar as consultas da CLI do Azure

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

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

Podemos atribuir o tamanho à nossa VM:

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

Ou, para recuperar todas as IDs dos adaptadores 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 partes específicas de dados da linha de comando. Também é útil para a criação de scripts. Por exemplo, você pode retirar um valor de sua conta do Azure e armazená-lo em uma variável de ambiente ou de script. Se você decidir usá-lo dessa maneira, será útil adicionar o parâmetro --output tsv (que pode ser abreviado como -o tsv). Isso retornará resultados que incluem apenas os valores de dados reais com separadores de guia.

Por exemplo:

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

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