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

Azure VMSS自定义脚本扩展启动时未自动执行问题求助

问题分析与解决方案

你的核心问题是VMSS扩容时新实例未自动执行CustomScript扩展,根源在于VMSS的模型-实例升级策略和扩展配置的关联逻辑,以下是具体解决步骤:

1. 调整VMSS升级策略

VMSS采用「模型定义+实例部署」的架构,默认如果升级策略设为Manual,新扩容的实例会沿用旧的VM模型(未包含扩展的版本),不会自动加载新添加的扩展。你需要将VMSS的升级策略改为Automatic或Rolling:

在你的azurerm_linux_virtual_machine_scale_set资源中添加或修改升级策略配置:

resource "azurerm_linux_virtual_machine_scale_set" "vmss" {
  # 其他原有配置...

  upgrade_policy {
    mode = "Automatic" # 可选:"Rolling"(更适合生产环境,可控制升级批次)
  }
}

修改后重新部署,新扩容的实例会自动使用包含CustomScript扩展的最新模型,脚本会在实例启动时自动执行。

2. 优化扩展配置

在扩展资源中添加自动升级小版本的配置,确保扩展能随VMSS模型自动同步到新实例:

resource "azurerm_virtual_machine_scale_set_extension" "customScriptExtension" {
  name                         = "my-cs-ext"
  virtual_machine_scale_set_id = azurerm_linux_virtual_machine_scale_set.vmss.id
  publisher                    = "Microsoft.Azure.Extensions"
  type                         = "CustomScript"
  type_handler_version         = "2.0"
  auto_upgrade_minor_version   = true # 新增:自动升级扩展小版本

  settings = jsonencode({
    "commandToExecute" = "sh init.sh"
    "fileUris" = ["storageurlToDownloadfrom/init.sh?sas_token"] # 注意:此处需确保下载的是init.sh而非foo.txt,否则脚本会因文件不存在执行失败
  })
}

3. 修正脚本下载路径(关键细节)

你当前配置中fileUris指向foo.txt,但执行命令是sh init.sh,这会导致实例下载的文件和执行脚本不匹配,直接引发执行失败。请将fileUris改为指向init.sh的有效存储URL(带SAS令牌)。

4. 同步现有实例(可选)

如果现有VMSS实例还在使用旧模型,修改升级策略后可通过Azure CLI触发批量升级,让现有实例也应用扩展:

az vmss update-instances --resource-group <你的资源组名称> --name <你的VMSS名称> --instance-ids "*"

为什么VM和VMSS有差异?

单VM是独立实例,添加扩展后会直接应用到该机器;而VMSS是集群架构,所有实例基于统一的「VM模型」创建。手动升级策略下,模型更新不会自动同步到实例(包括新扩容实例),必须手动触发升级;而自动/滚动策略会让新实例直接使用最新模型,无需手动干预。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:38:11