如何在ARM模板中获取Azure存储帐户的容器的路径

时间:2020-05-28 01:24:16

标签: azure-storage azure-storage-blobs azure-resource-manager arm-template

问题:如果可以访问存储帐户/容器资源,如何在我的ARM模板中生成指向容器的URL?

我有一个通过ARM模板部署的Azure存储帐户和blob容器。

我正在尝试保存SAS URI,以便将其写入密钥库中的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]"

但是我想在此value前面加上容器的路径,因此我可以使用有效负载在另一个服务中的URI上调用“ PUT”并对其进行升级。

类似"value": "[concat(getUri(concat('Microsoft.Storage/storageAccounts/blobServices/containers/', parameters('storageAccountName'), '/default/mycontainer')), '?', listAccountSas(parameters('storageAccountName'), '2018-02-01', variables('accountSasFunctionValues')).accountSasToken]"的事物-注意uri前缀为sas uri查询参数。

我们可能需要部署到不同的Azure Sovereign Cloud,所以我不想将存储帐户名称注入“ https://.blob.core.windows.net”字符串中,因为存储主机可能会更改每个部署也是如此

1 个答案:

答案 0 :(得分:0)

我看到reference(...) expression可用于获取一些数据。

"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存储帐户的主要端点。然后,我可以使用以下内容获取容器端点:[concat(reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))).primaryEndpoints.blob, 'mycontainer')]