问题:如果可以访问存储帐户/容器资源,如何在ARM模板中生成容器的URL?
我有一个Azure存储帐户和blob容器,我正在通过ARM模板进行分发。
我试图保存SAS URI以写入keyvault中的Blob存储。
我已经能够取消引用SAS URI查询参数,如下所示:
"variables": {
"accountSasFunctionValues": {
"signedServices": "bqt",
"signedPermission": "rlacup",
"signedResourceTypes": "oc",
"signedExpiry": "2050-01-01T00:00:00Z"
}
},
.
.
.
... "value": "[listAccountSas(parameters('storageAccountName'), '2018-02-01', variables('accountSasFunctionValues')).accountSasToken]"
但是,我想在这个值的前面加上容器的路径,这样我就可以用我的负载在另一个服务中的URI上调用“PUT”并上传它。
类似于“value”:“[concat(getUri(concat('Microsoft.Storage/storageAccounts/blobServices/containers/'),参数('storageAccountName'),'/default/mycontainer'),'?',listAccountSas(参数('storageAccountName'),'2018-02-01',变量('accountSasFunctionValues'))。accountSasToken”)”
-注意,uri是在sas前面加上的uri查询参数。
我们可能需要部署到不同的Azure Sovereign云,因此我不想将存储帐户名注入到“https://.blob.core.windows.net“字符串,因为每次部署存储主机也可能更改
我看到了参考(…)代码>表达式可用于获取某些数据。
"outputs": {
"BlobUri": {
"value": "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))).primaryEndpoints.blob]",
"type" : "string"
}
}
引用调用返回这样的对象:
{
"creationTime": "2017-10-09T18:55:40.5863736Z",
"primaryEndpoints": {
"blob": "https://examplestorage.blob.core.windows.net/",
"file": "https://examplestorage.file.core.windows.net/",
"queue": "https://examplestorage.queue.core.windows.net/",
"table": "https://examplestorage.table.core.windows.net/"
},
"primaryLocation": "southcentralus",
"provisioningState": "Succeeded",
"statusOfPrimary": "available",
"supportsHttpsTrafficOnly": false
}
这将获取blob存储帐户的主要endpoint。然后,我可以使用以下命令获取容器endpoint:
[concat(reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))).primaryEndpoints.blob, 'mycontainer')]