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

使用Terraform在Azure Linux虚拟机规模集部署脚本后Nginx未运行问题咨询

Azure Linux虚拟机规模集自定义脚本安装Nginx失败修复方案

核心根因及修复方案

1. 子网资源引用错误

你定义的子网数据源名称为azurerm_subnet.refdata,但在Windows和Linux虚拟机规模集的IP配置中,均错误引用了不存在的data.azurerm_subnet.test.id,导致实例无法正常获得网络配置、无法连接公网下载Nginx安装包,是问题的核心诱因。
修复方案:将所有subnet_id配置替换为data.azurerm_subnet.refdata.id。

2. 自定义脚本扩展版本已弃用

当前使用的Microsoft.OSTCExtensions.CustomScriptForLinux 1.0版本是官方早已停止维护的旧版本,对新的Azure镜像兼容性极差,经常出现执行无报错但实际未运行的问题。
修复方案:将扩展配置替换为官方维护的2.x版本:

resource "azurerm_virtual_machine_scale_set_extension" "res-extension" {
  name                         = "example"
  virtual_machine_scale_set_id = azurerm_linux_virtual_machine_scale_set.res-linuxscale.id
  publisher                    = "Microsoft.Azure.Extensions"
  type                         = "CustomScript"
  type_handler_version         = "2.1"
  settings = <<SETTINGS
{
    "fileUris": ["https://xxxxxxxxxxx.blob.core.windows.net/shellscript11/post-deploy.sh"],
    "commandToExecute": "chmod +x post-deploy.sh && bash post-deploy.sh"
}
SETTINGS
}

3. 脚本执行与运行逻辑问题

  • 你使用sh post-deploy.sh执行脚本,Ubuntu 16.04中sh默认指向dash而非bash,存在语法兼容风险,建议改为bash执行
  • 脚本未添加错误中断逻辑,即使安装失败也不会返回错误,建议调整脚本内容如下:
#!/bin/bash
set -e
apt-get update -y
apt-get install -y nginx
# 显式启动Nginx并设置开机自启
systemctl enable --now nginx

4. 存储账户访问权限验证

确认存放脚本的Blob容器访问级别设置为Blob匿名访问,否则脚本会下载失败。如果容器为私有,需要在扩展的protected_settings中配置存储账户的SAS令牌。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:54:04