使用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
相关产品推荐
相关产品推荐

