0
votes

We are developing an application which uses the following two resources:

  1. Azure Functions for the backend
  2. Azure Storage as a static website for the front end

This is being deployed automatically by our CI pipeline using ARM templates. However, for the application to work we need to set the CORS rules on the Azure function to allow the static website to perform the api calls.

This is now performed by the following resource configuration:

{
    "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'))]"
    ]
}

However we are hardcoding the .z21 parameter since we know that the location parameter will be South Central US. However, this is not something that we desire to hardcode since probably the application could be deployed to another location.

Reading upon the documentation for static website hosting it states that

The URL of your site contains a regional code. For example the URL https://contosoblobaccount.z22.web.core.windows.net/ contains regional code z22.

While that code must remain the URL, it is only for internal use, and you won't have to use that code in any other way.

However I couldnt find a reference to which regional codes are being used by Azure. Is there a way to know that so that we stop hardcoding this value into our ARM template?

Another approach would be to dynamically access the storage account properties on the ARM template through an ARM template function, however I am unsure of which function could help us retrieve the regional code for the storage account.

Thanks in advance!

2

2 Answers

0
votes

Ugly solution to extract regional code with PowerShell.

$stgname = '0708static'
$start = "https://$stgname."
$end = (Get-AzStorageAccount -Name $stgname -ResourceGroupName 'deleteme').PrimaryEndpoints.Web.TrimEnd('.web.core.windows.net/')
$result = $end.TrimStart("$start")
$result
0
votes

If you want the entire URI then you can use:

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

If you want just the region code you can use:

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