Compartilhar via


Dados personalizados e cloud-init em Máquinas Virtuais do Azure

Aplica-se a: ✔️ VMs Linux ✔️ VMs Windows ✔️ Conjuntos de dimensionamento flexíveis

Pode ser necessário injetar um script ou outros metadados em uma VM (máquina virtual) do Microsoft Azure no momento do provisionamento. Em outras nuvens, esse conceito é geralmente conhecido como dados do usuário. No Microsoft Azure, há um recurso semelhante chamado dados personalizados.

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

Transmitir dados personalizados à VM

Para usar dados personalizados, codifique o conteúdo em Base64 antes de transmiti-lo à API, a menos que você esteja usando uma ferramenta de CLI que faça a conversão para você, como a CLI do Azure. O tamanho não pode exceder 64 KB.

Na CLI, é possível transmitir dados personalizados como um arquivo, por exemplo: O arquivo será convertido em 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 realizam a comunicação com a plataforma e colocam os dados no sistema de arquivos.

Windows

Os dados personalizados são colocados em %SYSTEMDRIVE%\AzureData\CustomData.bin como um arquivo binário, mas não são processados. Para processar o arquivo, é necessário criar uma imagem personalizada e escrever um código para processar CustomData.bin.

Linux

Em sistemas operacionais Linux, os dados personalizados são transmitidos à 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 do Linux copiam os dados codificados em Base64 para /var/lib/waagent/CustomData para sua conveniência.

Atualmente, o Azure é compatível com dois agentes de provisionamento:

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

    • Provisioning.DecodeCustomData
    • Provisioning.ExecuteCustomData

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

    Se o script não for executado com êxito ou ocorrerem erros durante a execução, isso não será considerado uma falha fatal de provisionamento. Você precisa criar um caminho de notificação para obter alertas sobre o estado de conclusão do script.

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

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

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

    No entanto, ao contrário do Agente Linux, o cloud-init não aguarda até que as configurações de dados personalizados do usuário sejam concluídas para relatar à plataforma que a VM está pronta. Para saber mais sobre o cloud-init no Azure, incluindo a solução de problemas, confira Suporte do cloud-init para máquinas virtuais no Azure.

Perguntas frequentes

Posso atualizar dados personalizados depois que a VM tiver sido criada?

Para VMs individuais, não é possível atualizar dados personalizados no modelo de VM. Mas, para Conjuntos de Dimensionamento de Máquinas Virtuais, você pode atualizar dados personalizados. Para mais informações, confira Modificar um Conjunto de dimensionamento. Quando você atualiza os dados personalizados no modelo para um conjunto de dimensionamento de máquinas virtuais:

  • As instâncias existentes no conjunto de dimensionamento não recebem os dados personalizados atualizados até que sejam atualizadas para o modelo mais recente e a imagem refeita.
  • As novas instâncias recebem os novos dados personalizados.

Posso colocar valores confidenciais em dados personalizados?

Aconselhamos não armazenar dados confidenciais em dados personalizados. Para saber mais, confira Práticas recomendadas de segurança e criptografia de dados do Azure.

Os dados personalizados são disponibilizados no IMDS?

Os dados personalizados não estão disponíveis no IMDS (Serviço de Metadados de Instância) do Azure. Em vez disso, sugerimos o uso de dados do usuário no IMDS. Para saber mais, confira Dados do usuário por meio do Serviço de Metadados de Instância do Azure