Dados personalizados em máquinas virtuais Azure

Aplica-se a: ✔️ Linux VMs ✔️ Windows VMs ✔️ Conjuntos de escala flexível

Talvez seja necessário injetar um script ou outros metadados em uma máquina virtual (VM) do Microsoft Azure no momento do provisionamento. O Azure suporta este cenário através de uma funcionalidade chamada dados personalizados.

Os dados personalizados são disponibilizados para a VM durante a primeira inicialização ou configuração, o que é chamado de provisionamento. O provisionamento é o processo em que os parâmetros de criação da VM (por exemplo, nome do host, nome de usuário, senha, certificados, dados personalizados e chaves) são disponibilizados para a VM. Um agente de provisionamento, como o cloud-init, processa esses parâmetros.

Note

O Azure também oferece uma funcionalidade separada de dados de utilizador. Ao contrário dos dados personalizados, os dados do utilizador são recuperáveis do Azure Instance Metadata Service (IMDS), são persistentes durante toda a vida útil da VM e podem ser atualizados sem parar ou recriar a VM. Use os dados dos utilizadores quando precisar de acesso ou atualizações pós-provisionamento; Use dados personalizados quando precisar de um payload processado pelo agente de provisionamento no primeiro arranque.

Passar dados personalizados para a VM

Para usar dados personalizados, tem de codificar o conteúdo em Base64 antes de enviar os dados para a API, a menos que esteja a utilizar uma ferramenta de linha de comandos que faça essa conversão por si, como o CLI do Azure. O tamanho não pode exceder 64 KB.

Na CLI, você pode passar seus dados personalizados como um arquivo, como mostra o exemplo a seguir. O arquivo é convertido para Base64.

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --custom-data cloud-init.txt \
  --generate-ssh-keys

No Azure Resource Manager, há uma função base64:

"name": "[parameters('virtualMachineName')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2019-07-01",
"location": "[parameters('location')]",
"dependsOn": [
..],
"variables": {
        "customDataBase64": "[base64(parameters('stringData'))]"
    },
"properties": {
..
    "osProfile": {
        "computerName": "[parameters('virtualMachineName')]",
        "adminUsername": "[parameters('adminUsername')]",
        "adminPassword": "[parameters('adminPassword')]",
        "customData": "[variables('customDataBase64')]"
        },

Processar dados personalizados

Os agentes de provisionamento instalados nas VMs lidam com a comunicação com a plataforma e a colocação de dados no sistema de arquivos.

Windows

Os dados personalizados são colocados no %SystemDrive%\AzureData\CustomData.bin como ficheiro binário, mas não são processados. Para processar este ficheiro, crie uma imagem personalizada e escreva código que leia CustomData.bin.

A pasta%SystemDrive%\AzureData é protegida durante o provisionamento para que apenas NT AUTHORITY\ SYSTEM e BUILTIN\Administrators tenham controlo total, e CustomData.bin herda essas permissões. Se copiares CustomData.bin para outro local para processamento, define as permissões no destino explicitamente, pois as permissões não se transferem com o ficheiro...

Linux

Em sistemas operacionais Linux, os dados personalizados são passados para a VM por meio do arquivo ovf-env.xml . Esse arquivo é copiado para o diretório /var/lib/waagent durante o provisionamento. As versões mais recentes do Agente Linux copiam os dados codificados em Base64 para /var/lib/waagent/CustomData para conveniência.

Atualmente, o Azure dá suporte a dois agentes de provisionamento:

  • Agente Linux. Por padrão, o agente não processa dados personalizados. Você precisa criar uma imagem personalizada com os dados ativados. As configurações relevantes são:

    • Provisioning.DecodeCustomData
    • Provisioning.ExecuteCustomData

    Quando você habilita dados personalizados e executa um script, a máquina virtual não relatará uma provisão de VM bem-sucedida até que a execução do script tenha terminado. Se o script exceder o limite total de tempo de provisionamento de VM de 40 minutos, a criação de VM falhará.

    Se o script falhar na execução ou ocorrerem erros durante a execução, isso não será uma falha fatal de provisionamento. Você precisa criar um caminho de notificação para alertá-lo sobre o estado de conclusão do script.

    Para solucionar problemas de execução de dados personalizados, revise /var/log/waagent.log.

  • cloud-init. Por padrão, esse agente processa dados personalizados. Ele aceita vários formatos de dados personalizados, como configuração cloud-init e scripts.

    Semelhante ao Agente Linux, se ocorrerem erros durante a execução do processamento de configuração ou scripts quando o cloud-init estiver processando os dados personalizados, isso não será uma falha fatal de provisionamento. Você precisa criar um caminho de notificação para alertá-lo sobre o estado de conclusão do script.

    No entanto, ao contrário do Agente Linux, o cloud-init não espera que as configurações de dados personalizadas do usuário terminem antes de relatar à plataforma que a VM está pronta. Para obter mais informações sobre cloud-init no Azure, incluindo solução de problemas, consulte suporte cloud-init para máquinas virtuais no Azure.

FAQ

Posso atualizar dados personalizados após a VM ter sido criada?

Para VMs únicas, não é possível atualizar dados personalizados no modelo de VM. Mas para Conjuntos de Dimensionamento de Máquina Virtual, você pode atualizar dados personalizados. Para obter mais informações, consulte Modificar um conjunto de escalas. Quando você atualiza dados personalizados no modelo para um Conjunto de Dimensionamento de Máquina Virtual:

  • As instâncias existentes no conjunto de escala não obtêm os dados personalizados atualizados até que sejam atualizadas para o modelo mais recente e recriadas.
  • Novas instâncias recebem os novos dados personalizados.

Posso colocar valores confidenciais em dados personalizados?

Aconselhamos a não armazenar dados sensíveis em dados personalizados. Para obter mais informações, consulte Práticas recomendadas de segurança de dados e criptografia do Azure.

Os dados personalizados são disponibilizados no IMDS?

Não. Os dados personalizados não são apresentados através do Azure Instance Metadata Service (IMDS). Se precisar de obter uma carga útil a partir do interior da VM depois do aprovisionamento, ou de a atualizar sem parar nem recriar a imagem da VM, utilize antes a funcionalidade dados do utilizador. Para detalhes sobre a leitura de dados de utilizadores do IMDS, consulte Obter dados de utilizador.