在逻辑应用程序中使用被调用的azure函数的id内的参数时出错

时间:2018-06-18 13:33:06

标签: azure-functions azure-logic-apps

我在不同阶段有不同的天蓝色功能, 当我部署我的逻辑应用程序时,我想配置调用的azure函数。

我添加了一个名为:

的新参数
"unzip_gzip_path": {
      "value": "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/XXXTest/providers/Microsoft.Web/sites/FunctionApp201806XXXXXXXX/functions/Function1"
    } 

并在他的手臂模板中使用他:

"$functions_paths": {
            "value": {
              "unzip_gzip": {
                "path": "[parameters('unzip_gzip_path')]"
              }
            }
          }

Azure函数调用如下:

"Function1":{
                      "type": "Function",
                      "inputs": {
                        "body": "@items('For_each_attachment')?['ContentBytes']",
                        "method": "POST",
                        "function": {
                          "id": "@parameters('$functions_paths')['unzip_gzip']['path']"
                        }
                      },
                      "runAfter": {}
                    }

现在我收到了错误

15:31:34 - 15:31:33 - Resource Microsoft.Logic/workflows 'DMARCReportingProcessingLogicApp' failed with message '{
15:31:34 -   "error": {
15:31:34 -     "code": "LinkedInvalidPropertyId",
15:31:34 -     "message": "Property id '@parameters('$functions_paths')['unzip_gzip']['path']' at path 'properties.definition.actions.For_each_attachment.actions.Condition.actions.Function1.inputs.function.id' is invalid. Expect fully qualified resource Id that start with '/subscriptions/{subscriptionId}' or '/providers/{resourceProviderNamespace}/'."
15:31:34 -   }
15:31:34 - }'

可能是我不能在功能位置使用参数吗?

2 个答案:

答案 0 :(得分:2)

目前,该功能的资源ID只能在部署时设置,而不能在运行时设置。设置它的正确方法是作为ARM参数,而不是逻辑应用程序参数,如果这是有道理的。

Here's an example一个参数化的部署。

{ "Azure_Function": { "type": "Function", "inputs": { "body": "@triggerBody()", "function": { "id": "[resourceId('Microsoft.Web/sites/functions', parameters('functionAppName'), variables('functionName'))]" } }, "runAfter": {} }

答案 1 :(得分:0)

我没有足够的代表评论杰夫霍兰。但是,请谨慎使用他的建议。是的,这是合法的,有效的,而且似乎是唯一的方法。但是,如果您使用Visual Studio进行开发,而不是谁来解决这些愚蠢的事情,那么在“设计”视图中打开它时,您的ARM参数将被您为defaultValue设置的内容替换。是的,实际上已替换为其解析为的文字字符串,不再使用[parameter('')]表达式。因此,您可以进入代码视图,或者只是在文本编辑器中打开ARM模板并按照建议进行设置,将其部署就可以了,但是随后您打开VS Designer,您的工作就被淘汰了。

因此,在文本编辑器中,将ID设置为:

[resourceId('Microsoft.Web/sites/functions', parameters('functionAppName'), variables('functionName'))]

然后,您在Visual Studio设计器中打开LA并切换到代码视图,仅查看:

/subscriptions/<YOU_SUB_ID_HERE>/resourcegroups/<YOUR_RG_HERE>/providers/Microsoft.Web/sites//functions/

实际上,如果您在VS Logic App Designer的“代码视图”中尝试设置表达式时,保存时将引发错误,并且也不允许您切换到“设计”视图。

所以,是的,他的建议可行,但是每次在Visual Studio Logic App Designer中打开Logic App时,您都必须重新做一次。