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

使用Farmer创建Azure VM时无法添加现有存储账户启用诊断日志

问题原因

该问题是Farmer虚拟机构建器的diagnostics_support_external参数存在生成逻辑缺陷:当关联非托管(即不在当前Farmer部署范围内、已提前创建好的)存储账户时,自动生成的ARM模板reference表达式只传入了存储账户名称,没有指定完整的资源类型命名空间和对应API版本。ARM部署校验时,会默认仅在当前模板定义的内部资源范围内查找该名称的资源,自然无法匹配到模板外部的存量存储账户,最终抛出资源找不到的校验错误。

可行解决方法
  • 临时手动修正生成的ARM模板
    每次通过Farmer生成ARM模板后,找到虚拟机资源下的diagnosticsProfile.bootDiagnostics.storageUri字段,将原有错误的reference表达式替换为带完整资源类型、API版本的正确格式,示例如下:
"storageUri": "[reference(concat('Microsoft.Storage/storageAccounts/', '你的存储账户名称'),'2015-06-15').primaryEndpoints.blob]"

该方法仅适合临时单次部署场景,每次重新生成模板都需要重复修改,无法适配自动化部署流程。

  • 在Farmer代码层通过自定义属性覆写修正逻辑
    不需要依赖官方修复,直接利用Farmer提供的资源属性扩展能力,手动覆写虚拟机的启动诊断配置,强制生成符合ARM规范的引用表达式,示例F#代码如下:
let externalStorageAccResId = resourceId // 替换为你实际的外部存储账户资源ID
// 构造符合ARM规范的存储账户Blob端点引用表达式
let correctStorageUriExpr = 
    ArmExpression.reference
        (ResourceType("Microsoft.Storage/storageAccounts", "2015-06-15"))
        externalStorageAccResId
        ["primaryEndpoints"; "blob"]

vm {
    // 此处配置虚拟机的名称、大小、操作系统、网络等其余常规参数
    // 最后添加自定义属性,覆盖默认生成的错误启动诊断配置
    add_properties (
        {| diagnosticsProfile =
            {| bootDiagnostics =
                {| enabled = true
                   storageUri = correctStorageUriExpr.Eval() |}
            |}
        |}
    )
}

该方法可以在代码层面一次性解决问题,生成的模板直接符合部署要求,无需后续手动修改,适配CI/CD自动化部署场景。

  • 升级Farmer到修复该问题的新版本
    该缺陷属于Farmer对非托管外部资源的引用生成逻辑遗漏,后续官方版本已经补全了外部资源引用时自动拼接资源类型、指定API版本的逻辑。直接将项目引用的Farmer包升级到最新稳定版本后,原有diagnostics_support_external的标准写法即可正常生成可部署的ARM模板,不需要额外编写自定义覆写逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:39:30