Azure ARM模板使用自动生成的SAS令牌启用Linux诊断扩展

Azure ARM模板使用自动生成的SAS令牌启用Linux诊断扩展,azure,diagnostics,azure-diagnostics,sas-token,Azure,Diagnostics,Azure Diagnostics,Sas Token,我正在尝试使用新的VM部署arm模板,并设置Linux诊断扩展/LAD,而不创建新的存储帐户,而是使用现有帐户。我发现本文使用了listAccountSas,并在ProtectedSettings中进行了设置: storageAccountSasToken: [listAccountSasparameters'existingStorageName'、'2018-07-01', 变量'accountSasProperties'。accountSasToken] 尝试部署模板时,在验证过程中出现错

我正在尝试使用新的VM部署arm模板,并设置Linux诊断扩展/LAD,而不创建新的存储帐户,而是使用现有帐户。我发现本文使用了listAccountSas,并在ProtectedSettings中进行了设置:

storageAccountSasToken: [listAccountSasparameters'existingStorageName'、'2018-07-01', 变量'accountSasProperties'。accountSasToken]

尝试部署模板时,在验证过程中出现错误:

InvalidTemplate,消息:部署模板验证失败: '模板引用'MyExistingStorage Account'无效:无法 找不到此名称的模板资源或资源副本。请看 供使用 详情。}

她说:

引用函数和列表*函数不创建隐式 当资源被其资源ID引用时的依赖关系。到 创建一个隐式依赖项,传递所需资源的名称 部署在同一模板中

但是,我尝试使用嵌套模板创建SAS令牌,并在输出中设置sasToken.Id,稍后在主模板中使用sasToken.Id调用诊断扩展:

{
    "apiVersion": "2017-08-01",
    "name": "SasTokenNestedTemplate",
    "type": "Microsoft.Resources/deployments",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
    ],
    "properties": {
        "mode" : "Incremental",
        "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {},
        "variables": {},
        "resources": [
            {
                "apiVersion" : "2018-03-01",
                "type":  "Microsoft.Resources/deployments",
                "name": "NestedSasTokenCreation",
                "properties": {
                    "sasToken": "[listAccountSas(parameters('existingStorageName'), '2018-07-01', variables('accountSasProperties')).accountSasToken]"
                    }
                }
                ],
                "outputs": {
                    "sasToken": {
                      "type": "string",
                      "value": "[resourceId('Microsoft.Resources/deployments', parameters('sasToken'))]"
                    }
                  }
            }
        }
    },


   {
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "apiVersion": "[providers('Microsoft.Compute','virtualMachines/extensions').apiVersions[0]]",
    "location": "[parameters('vmLocation')]",
    "dependsOn": [ 
        "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"      
     ],
    "name": "[concat(parameters('vmName'), '/LinuxDiagnostic')]",      
    "properties": {
        "publisher": "Microsoft.Azure.Diagnostics",
        "type": "LinuxDiagnostic",
        "autoUpgradeMinorVersion": true,
        "typeHandlerVersion": "3.0", 

        "protectedSettings": {
          "storageAccountName": "[parameters('existingStorageName')]",
          "storageAccountSasToken": { "value": "[reference('SasTokenNestedTemplate', '2017-08-01').outputs.sasToken.value]" }, 

          "storageAccountEndPoint": "https://core.windows.net/",
          "sinksConfig": {
            "sink": [
              {
                "name": "WADMetricJsonBlob",
                "type": "JsonBlob"
              }
            ]
          }  
但是仍然得到与上面相同的错误。
提前感谢您的帮助

您需要为它提供存储帐户的资源id,因为它不是模板的一部分,它自己无法计算出来

listAccountSas(resourceId('Microsoft.Storage/storageAccounts', parameters('existingStorageName')), '2018-07-01', variables('accountSasProperties')).accountSasToken

你是我的英雄!谢谢你,伙计!
listAccountSas(resourceId('Microsoft.Storage/storageAccounts', parameters('existingStorageName')), '2018-07-01', variables('accountSasProperties')).accountSasToken