Terraform部署Azure通用化Linux镜像报StorageProfile.dataDisks.lun错误
问题根因
你制作自定义镜像的源虚拟机挂载了LUN为0的数据盘,Azure会将该数据盘的LUN配置写入镜像元数据,部署从该镜像创建的虚拟机时,必须匹配镜像声明的所有数据盘LUN要求,否则就会抛出你遇到的*StorageProfile.dataDisks.lun does not have required value(s) for image specified in storage profile.*错误。
解决方案
方案1:在虚拟机定义中显式声明镜像要求的LUN 0数据盘
修改你的azurerm_linux_virtual_machine资源配置,新增对应LUN 0的data_disk块,无需单独使用azurerm_virtual_machine_data_disk_attachment资源声明该盘:
resource "azurerm_linux_virtual_machine" "vm" { # 原有其他配置保持不变 os_disk { # 原有OS盘配置保持不变 } # 新增LUN 0的数据盘配置,匹配镜像要求 data_disk { lun = 0 caching = "ReadWrite" storage_account_type = "StandardSSD_LRS" # 需要继承镜像中数据盘的内容用FromImage;需要全新空盘则改为Empty并指定disk_size_gb create_option = "FromImage" # create_option = "Empty" # disk_size_gb = 250 } # 原有其他配置保持不变 }
如果你当前单独挂载的LUN 1数据盘是额外新增的,可以保留原有的azurerm_virtual_machine_data_disk_attachment配置,无需修改。
方案2:重新制作无附加数据盘的通用化镜像
如果你不需要镜像中携带数据盘内容,可以重新制作镜像:
- 启动源虚拟机,卸载LUN 0的数据盘
- 重新执行通用化操作
waagent -deprovision+user - 重新捕获通用化镜像到共享映像库
使用新镜像部署时就不会有LUN要求,原有Terraform配置无需调整即可正常使用。
内容的提问来源于stack exchange,提问作者user2172398
相关产品推荐
相关产品推荐

