首页 > 解决方案 > 在 ARM 模板中检索 azure 静态网站的区域代码

问题描述

我们正在开发一个使用以下两种资源的应用程序:

  1. 用于后端的 Azure Functions
  2. Azure 存储作为前端的静态网站

这是由我们的 CI 管道使用 ARM 模板自动部署的。但是,为了使应用程序正常工作,我们需要在 Azure 函数上设置 CORS 规则,以允许静态网站执行 api 调用。

这现在由以下资源配置执行:

{
    "type": "Microsoft.Web/sites/config",
    "name": "[concat(variables('functionAppName'), '/web')]",
    "apiVersion": "2016-08-01",
    "location": "[parameters('location')]",
    "properties": {
        "cors": {
            "allowedOrigins": [
                "[concat('https://', variables('storageAccountName'),'.z21', '.web.core.windows.net']"
            ],
        }
    },
    "dependsOn": [
        "[resourceId('Microsoft.Web/sites/', variables('functionAppName'))]"
    ]
}

但是,我们正在对.z21参数进行硬编码,因为我们知道该location参数将是美国中南部。然而,这不是我们想要硬编码的东西,因为可能应用程序可以部署到另一个位置。

阅读静态网站托管的文档时指出

您网站的 URL 包含区域代码。例如 URL https://contosoblobaccount.z22.web.core.windows.net/包含区域代码 z22。

虽然该代码必须保留为 URL,但它仅供内部使用,您不必以任何其他方式使用该代码。

但是,我找不到 Azure 正在使用哪些区域代码的参考。有没有办法知道这一点,以便我们停止将该值硬编码到我们的 ARM 模板中?

另一种方法是通过ARM 模板函数动态访问 ARM 模板上的存储帐户属性,但是我不确定哪个函数可以帮助我们检索存储帐户的区域代码。

提前致谢!

标签: azureazure-web-app-serviceazure-functionsazure-storageazure-resource-manager

解决方案


如果你想要整个 URI,那么你可以使用:

[reference(variables('storageAccountId'), '2019-04-01').primaryEndpoints.web

如果您想要区域代码,您可以使用:

[split(reference(variables('storageAccountId'), '2019-04-01').primaryEndpoints.web, '.')[1]]


推荐阅读