You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform Azure对应GCP metadata_startup_script的VM引导机制

解答

参数归属说明

metadata_startup_script 是 GCP Terraform 提供商 的专属参数,仅适用于google/google-beta驱动下的GCP计算资源,AzureRM提供商未定义该参数,直接跨云复用GCP配置必然触发参数不合法报错。

Azure Linux VM 对应的开机引导方案

Terraform 管理Azure Linux虚拟机时,有两种常用的开机脚本配置方式:

  • custom_data参数:基于通用cloud-init标准实现,脚本仅在虚拟机首次部署开机时执行一次,行为和GCP的metadata_startup_script完全一致,适配所有默认预装cloud-init的Linux发行版(包括Debian),是首次初始化场景的首选方案。
  • Azure Custom Script Extension扩展:Azure平台专属的扩展能力,支持在虚拟机运行的任意阶段触发脚本执行,同时兼容Linux和Windows系统,适合部署完成后的后续运维操作场景。

注意custom_data要求传入base64编码后的脚本内容,Terraform内置的base64encode()函数可以自动完成编码,无需手动处理。

配置示例

针对你需要安装Apache的需求,对应azurerm_linux_virtual_machine资源的配置片段如下:

resource "azurerm_linux_virtual_machine" "demo_vm" {
  name                = "debian-demo-vm"
  resource_group_name = azurerm_resource_group.demo.name
  location            = azurerm_resource_group.demo.location
  size                = "Standard_B1s"
  admin_username      = "adminuser"
  network_interface_ids = [azurerm_network_interface.demo.id]
  
  # 管理员SSH密钥配置,根据实际情况调整
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

  source_image_reference {
    publisher = "Debian"
    offer     = "debian-12"
    sku       = "12-gen2"
    version   = "latest"
  }

  # 开机启动脚本配置
  custom_data = base64encode(<<-SCRIPT
    #!/bin/bash
    apt-get update
    apt-get install -y apache2
    systemctl start apache2
    systemctl enable apache2
  SCRIPT
  )
}

配置提示:

  • 脚本首行必须添加#!/bin/bash声明解释器,否则cloud-init无法正常识别执行
  • cloud-init默认以root权限执行custom_data传入的脚本,不需要额外加sudo
  • 脚本执行日志可以在虚拟机内的/var/log/cloud-init-output.log路径查看,用于排查初始化失败问题

内容的提问来源于stack exchange,提问作者xpt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:06:48