Azure 资源管理器无法下载模板

Azure Resource Manager cannot download template

出于测试目的,我们有 PS 脚本来将我们的 ARM 模板部署到测试资源组。

$ctx = New-AzStorageContext -StorageAccountName $storageAccountName -UseConnectedAccount
$sasToken = New-AzStorageContainerSASToken -Context $ctx  -Name $containerName -Permission r -ExpiryTime (Get-Date).AddHours(1)

$toDeploy = "app1", "app2"
foreach ($template in $toDeploy) {
    $templateUri = "${containerUrl}/${template}.json${sasToken}"
    $templateParameterUri = "${containerUrl}/${template}.parameters.Integration.json${sasToken}"
    $templatePostUri = "${containerUrl}/${template}.Post.json${sasToken}"
    
    New-AzResourceGroupDeployment -ResourceGroupName $resourceGroup `
        -TemplateUri $templateUri `
        -TemplateParameterUri $templateParameterUri `
        -Mode Incremental `
        -DeploymentDebugLogLevel All `
        -Name "TestDeployment" `
        -Verbose

    New-AzResourceGroupDeployment -ResourceGroupName $resourceGroup `
        -TemplateUri $templatePostUri `
        -Mode Incremental `
        -DeploymentDebugLogLevel All `
        -Name "TestDeploymentPost" `
        -Verbose

它适用于三分之二的开发人员。当我们中的一个人执行此操作时,会显示一条错误消息,指出模板的 link 无效。 ARM无法下载。

Error: Code=InvalidContentLink; Message=Unable to download deployment content from
     | 'https://ourstorage.blob.core.windows.net/user-testing/app1.json?SAS_TOKEN_HERE'. The tracking Id is '386e7670-1863-4c85-9484-8a27d2dd0760'.

但是当我们将它复制到浏览器时我们可以下载它。我们三个人。由于某种原因,只有 ARM 无法下载它。当存储帐户配置为具有 public 访问权限并且我们从 link 中删除 SAS 令牌时,它可以从此开发人员的机器上运行。所以看起来像从一台机器生成 SAS 令牌的一些问题。但为什么这个 SAS 令牌对我们(3 位开发人员)没问题,但对 ARM 无效?

检查存储帐户的防火墙设置。它将需要允许来自 All networks 的访问。我看到了完全相同的情况和错误消息,因为我们的开发人员可以通过允许的 IP 进行访问,但 ARM 不能。在 Microsoft 为 'Azure Resource Manager for template deployment' 启用存储帐户之前,如 Key Vaults,ARM 将无法访问防火墙后面的存储内容,即使使用 SAS 令牌也是如此。

虽然以下引用是关于 linked ARM 模板的,但它仍然适用于通过 URI 进行部署。 “目前,您不能 link 到 Azure 存储防火墙后面的存储帐户中的模板。” -- 来源:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/linked-templates#securing-an-external-template

关于 GitHub 的问题讨论:https://github.com/MicrosoftDocs/azure-docs/issues/37309

所以问题是时钟漂移。我在另一台机器上尝试了它并收到了同样的错误,但这次我什至无法使用浏览器下载模板。但它给了我错误信息——SAS 令牌无效。根据 ARM,它的开始时间是未来。

解决方案是添加 -StartTime (Get-Date).AddMinutes(-2)

看起来这台机器上的时钟更慢了,所以我可以在浏览器中发现问题(将来会更多)。对于其他 PC,当我们将 link 粘贴到模板到浏览器令牌中时已经很好,所以看起来它只对 ARM 是错误的。