代码之家  ›  专栏  ›  技术社区  ›  onefox

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

  •  0
  • onefox  · 技术社区  · 6 年前

    我在不同阶段有不同的azure功能, 当我部署我的逻辑应用程序时,我想配置什么叫做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 回复  |  直到 6 年前
        1
  •  2
  •   jeffhollan    6 年前

    当前只能在部署时设置函数的资源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": {} }

        2
  •  0
  •   sparse_matrix    6 年前

    我没有足够的代表对杰夫霍兰发表评论。不过,要小心使用他的建议。是的,这是合法的,有效的,而且似乎是唯一的方法。但是,如果您正在使用visual studio进行开发,并且谁不适合这些愚蠢的事情,那么当您在设计视图中打开arm时,您的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逻辑应用程序设计器中打开逻辑应用程序时,都必须重新执行。