Descrição do problema: estados 'parado' e 'desalocado' de uma VM inativa
Em nuvens, suas VMs estão temporariamente alugando uma parte do poder de computação dos custos do hipervisor, e você paga por isso. É óbvio que você paga por elas quando sua VM é ligada, mas há alguns casos em que sua VM ainda pode consumir dinheiro para computação mesmo se estiver desligada.
A coisa mais irritante em relação às cobranças por VMs desligadas é a diferença do Azure entre os estados 'parado' e 'desalocado' de uma VM inativa. O mecanismo subjacente é o seguinte:
- Quando você para sua VM usando o portal do Azure, ela vai para o estado “Parado (desalocado)” no portal. Isso significa que o Azure destruiu sua instância de VM no host do hipervisor e liberou todos os recursos conectados, como IPs públicos não estáticos relacionados a isso. VM. Você não paga custos de computação para uma VM neste estado.
- Quando você para sua VM via chamada do SO convidado, ela vai para o estado “Parado” no portal. Diferentemente do caso anterior, a VM não será destruída em seu host do hipervisor, então você ainda aluga uma parte do hipervisor e paga por isso. Na maioria dos casos, isso não é o que você quer. Na verdade, o único cenário em que você gostaria de ter uma máquina no estado “Parado” é se você quiser desligá-la por um período muito curto de tempo e salvar IPs públicos não estáticos conectados a ela.
Como detectar VMs não desalocadas
Então, você quer escanear a assinatura para VMs paradas, mas não desalocadas. Isso pode ser feito manualmente pelo portal do Azure, mas como essa tarefa deve ser feita periodicamente, o Azure CLI é uma maneira muito melhor de executar essa verificação.
lista az vm comando é uma maneira muito útil de mostrar VMs em alguma assinatura (com parâmetro –subscription) e até mesmo filtrá-las por alguma condição e formato de saída (usando parâmetro –query). Mas o estado da máquina não é mostrado nesta saída de comando devido a razões de desempenho. Portanto, devemos usar az vm mostrar comando com -d conjunto de parâmetros. A próxima coisa a ser tratada – queremos escanear toda a assinatura para tais VMs enquanto az vm mostrar requer o nome da VM ou uma lista de IDs de VM como um parâmetro de entrada. Então, o primeiro passo é fazer uma rápida lista az vm consultar e formatar sua saída como lista de IDs.
E por fim, filtramos a saída por VM's poderEstado campo, observando também que a resposta da API tem uma pequena diferença na nomenclatura do estado da VM: “Parado (desalocado)” no portal é mostrado como “VM desalocado”, enquanto o estado “Parado” é “VM parada” na resposta da API.
Polindo com alguma formatação de saída, e aqui está o comando para detecção de VMs paradas incorretamente:
az vm show -d --ids $(az vm list --subscription --query "[].id" -o tsv) --query "[?powerState=='VM parada'].{Id:id, ResourceGroup:resourceGroup}" --output table
Você pode executar este comando no console Bash integrado ao portal do Azure ou configurar um trabalho periódico para verificar suas assinaturas.
Max Bozhenko, Entusiasta e praticante de FinOps, CTO na Hystax