功能 - AzureWebJobsServiceBus 设置为来自在同一 ARM 模板中创建的规则的键

Functions - AzureWebJobsServiceBus set to key from rules created in same ARM template

我正在编写一个部署构成应用程序一部分的资源的 ARM 模板。

AzureWebJobsServiceBus 应用程序设置需要部署才能使此函数触发器工作。当然,队列连接字符串包含来自同一 ARM 模板中创建的授权规则的共享访问密钥。

我需要以某种方式构建连接字符串并引用刚刚创建的密钥。

    "siteConfig": {
        "appSettings": [
            {
                "name": "AzureWebJobsServiceBus",
                "value": "[concat('Endpoint=sb://', parameters('serviceBusNamespaceName'), '.servicebus.windows.net/;SharedAccessKeyName=sender-listener;SharedAccessKey=', listKeys(resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', parameters('serviceBusNamespaceName'), '/http-push/sender-listener'),'2015-05-01-preview').key1)]"
            },

目前,上面给出了这个错误。

Deployment template validation failed: 'The template resource 'mycompany-myapp-mycomponent-functionapp' at line '136' and column '9' is not valid: Unable to evaluate template language function 'resourceId': function requires exactly one multi-segmented argument which must be resource type including resource provider namespace.

更新

错误是由我的 dependsOn 引起的,尽管它与我在上面的 value 中使用的语法相同,所以感觉像是进步。我的情况的正确语法是:

"dependsOn": [
    "[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', parameters('serviceBusNamespaceName'), 'queue-name', 'auth-rule-name')]"
],

仍在研究另一位。

更新

现在将其用作上述应用设置的值会导致新错误。

"[concat('Endpoint=sb://', parameters('serviceBusNamespaceName'), '.servicebus.windows.net/;SharedAccessKeyName=auth-rule-name;SharedAccessKey=', listKeys(resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', parameters('serviceBusNamespaceName'), 'queue-name', 'auth-rule-name'),'2015-05-01-preview').key1)]"

No registered resource provider found for location 'uksouth' and API version '2015-05-01-preview' for type 'namespaces/queues/authorizationrules'. The supported api-versions are '2014-09-01, 2015-08-01, 2017-04-01'. The supported locations are ''.

:(

更新

listKeys 的版本切换到 2017-04-01,现在出现了这个非常有用的错误!

'The language expression property 'key1' doesn't exist, available properties are 'primaryConnectionString, secondaryConnectionString, primaryKey, secondaryKey, keyName'.'

好的,排序花了大约 8 个小时。 #高效

根据这里的错误:

'The language expression property 'key1' doesn't exist, available properties are 'primaryConnectionString, secondaryConnectionString, primaryKey, secondaryKey, keyName'.'

连接字符串可用,这听起来好像不需要我连接自己的连接字符串,唉,服务总线队列触发器不喜欢最后的队列名称,所以我必须像这样手动编写它.

"value": "[concat('Endpoint=sb://', parameters('serviceBusNamespaceName'), '.servicebus.windows.net/;SharedAccessKeyName=auth-rule-name;SharedAccessKey=', listKeys(resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', parameters('serviceBusNamespaceName'), 'queue-name', 'auth-rule-name'),'2017-04-01').primaryKey)]"