在ARM模板

时间:2016-08-26 08:23:55

标签: azure azure-storage azure-management-api arm-template

我正在尝试使用资源管理器模板自动为Azure中的存储帐户创建API连接。

我在ARM中使用listKeys方法来检索存储帐户的访问密钥。我经历了这个question并且它不适合我。 当我在模板的outputs部分中使用该方法时,它正常工作并成功检索并显示访问密钥。

"outputs": { "listKeysOutput": { "type": "string", "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storagename')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]" } }

但是,当我尝试在连接资源中使用相同的函数时(如下所示),模板执行时没有任何错误。但是在从Azure门户访问API连接时,它表示缺少'参数。

"parameterValues": { "accesskey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storagename')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]", "accountName": "[parameters('storagename')]" }

enter image description here

enter image description here

我在这里遗漏了什么吗?或者' accesskey'不接受listKeys的输出。属性?

4 个答案:

答案 0 :(得分:2)

几个月前我有类似的经历,并通过在我的代码中直接使用连接字符串然后将连接字符串传递给连接来解决它。价值看起来像这样:

[concat('DefaultEndpointsProtocol=https;AccountName=',  variables('storageConfigs')[0].name,';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts/',  variables('storageConfigs')[0].name), variables('defaultStorageApiVersion')).key1)]

我使用了一个存储配置对象作为输入,这就是为什么它在上面看起来可以用您在代码中使用的任何名称或变量函数替换variables('storageConfigs')[0].name。如上图所示可能是storagename

答案 1 :(得分:1)

@Naren,我建议您可以使用此API函数来获取存储密钥

  

POST   https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys?api-version={api-version}

您可以获得与模板相同的结果。

    {
  “keys”: [
    {
      “keyName”: “key1”,
      “value”: "key1Value”,
      “permissions”: “FULL”
    },
    {
      “keyName”: “key2”,
      “value”: "key2Value”,
      “permissions”: “FULL”
    },
  ]
}

仅供参考: https://msdn.microsoft.com/en-us/library/mt163589.aspx

答案 2 :(得分:0)

可能导致此问题的两件事:

  1. 确保API连接依赖于存储帐户
  2. 将密钥大写在" accessKey" (模板中的某些内容区分大小写)

答案 3 :(得分:0)

依赖性确实是一项要求,因此在启动api连接部署之前已经创建了存储帐户。

OP模板代码的问题是使用accesskey,而正确的参数名称是accessKey(注意大写字母K),用于Azure Blob api连接资源。

对于那些因缺乏API连接资源所需参数的文档而苦苦挣扎的人 - 启动此API调用:

https://management.azure.com/subscriptions/<YOUR SUBSCRIPTION ID>/providers/Microsoft.Web/locations/<YOUR LOCATION>/managedApis/<API TYPE>?api-version=2016-06-01

<API TYPE>应该是要检查的连接的api类型,例如azureblobazurequeuesdocumentdb

所有预期参数的描述将与该资源的其他描述性信息一起返回。