Dados personalizados e inicialização na nuvem em Máquinas Virtuais do Azure

Atenção

Este artigo faz referência ao CentOS, uma distribuição Linux que está se aproximando do status de Fim da Vida Útil (EOL). Por favor, considere o seu uso e planeje de acordo. Para obter mais informações, consulte as diretrizes de Fim da Vida Útil do CentOS.

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. Em outras nuvens, esse conceito é frequentemente chamado de dados do usuário. O Microsoft Azure tem um recurso semelhante chamado 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 Linux Agent ou cloud-init, processa esses parâmetros.

Passar dados personalizados para a VM

Para usar dados personalizados, você deve codificar o conteúdo da Base64 antes de passar os dados para a API, a menos que esteja usando uma ferramenta da CLI que faça a conversão para você, como a 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 centos74 \
  --image OpenLogic:CentOS-CI:7-CI:latest \
  --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 em %SYSTEMDRIVE%\AzureData\CustomData.bin como um arquivo binário, mas não são processados. Se você quiser processar esse arquivo, você precisa construir uma imagem personalizada e escrever código para processá CustomData.bin.

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?

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 obter mais informações, consulte Dados do usuário por meio do Serviço de Metadados de Instância do Azure.