【问题标题】:Azure Functions: how to set CORS via automation?Azure Functions:如何通过自动化设置 CORS?
【发布时间】:2018-04-05 22:07:12
【问题描述】:

我有一个天蓝色的函数应用程序,我想以可重复(自动)的方式设置它,以便我可以在不同的环境/资源组中复制它。我可以通过 azure cli 创建函数应用,但我还需要配置 CORS 选项,以便可以从浏览器调用它。

我在 azure 门户 web ui 中找到了执行此操作的位置, 在“平台功能”选项卡(https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#cors)中,但我找不到任何关于通过 azure cli 修改该设置的信息,或者当我更改应用程序。

似乎您甚至可以通过 local.settisg.json 为本地开发指定 CORS 设置,但这仅适用于本地 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local#local-settings)。如果我通过 azure function tools cli 部署应用程序,我可以在部署时指定 --publish-local-settings 标志,但我没有以这种方式部署。

似乎必须有一种方法可以在不使用 Web UI 的情况下修改 CORS 配置,我只是没找到吗?

【问题讨论】:

    标签: azure cors azure-functions arm-template


    【解决方案1】:

    我倾向于将函数 CORS 条目自动化作为部署的一部分(在函数应用资源已经在管道或其他管道中使用 ARM 模板构建之后)。

    由于您可以在函数应用中拥有多个函数,因此我考虑特定于函数应用中部署的函数的 CORS 要求,并且我认为任何 CORS 条目都应该是实际函数部署过程的一部分。

    我使用 Azure CLI 来自动化 CORS 设置。请参考How to set CORS via Automation for Azure Functions

    az functionapp cors add --allowed-origins
                        [--ids]
                        [--name]
                        [--resource-group]
                        [--slot]
                        [--subscription]
    

    您还可以像这样检查/显示现有条目:

    az functionapp cors show --name MyFunctionApp --resource-group MyResourceGroup
    

    【讨论】:

    • 问题是您不能通过这种方式将 cors supportCredentials 设置为 true。您会注意到 show 属性返回一个“supportCredentials”属性,截至撰写本文时,该属性似乎作为 cors add 命令中的参数不存在。
    【解决方案2】:

    Fabio 的回答是正确的,Azure 资源管理器模板适用于此。由于他链接的示例是关于逻辑应用程序而不是 Azure 函数,因此正确获取模板需要进行一些更改,我想添加一些细节,以帮助其他人更快地到达那里。

    为了制作模板,我最终从我手动创建的函数应用程序中下载了自动化模板,然后删除了一些内容,直到达到我认为的最低限度。这是我正在使用的:

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "function_app_name": {
          "defaultValue": "my-function-app",
          "type": "string"
        }
      },
      "variables": {},
      "resources": [
        {
          "comments": "CORS allow origins *.",
          "type": "Microsoft.Web/sites/config",
          "name": "[concat(parameters('function_app_name'), '/web')]",
          "apiVersion": "2016-08-01",
          "properties": {
            "cors": {
              "allowedOrigins": [
                "*"
              ]
            }
          },
          "dependsOn": []
        }
      ]
    }
    

    我还有一个与此相关的参数文件,如下所示:

    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "function_app_name": {
                "value": null
            }
        }
    }
    

    然后我的发布定义中有一个Azure Resource Group Deployment 步骤,用于部署它并根据我部署到的环境替换所需的函数应用名称。

    【讨论】:

      【解决方案3】:

      要以编程方式设置 CORS 设置,您需要使用 ARM。

      以下是您可以遵循的示例:https://msftplayground.com/2016/08/setting-api-definition-url-cors-value-arm/

      【讨论】:

      • 谢谢你,成功了。我将在另一个答案中发布具体细节,以防它帮助其他人更直接地到达那里。
      猜你喜欢
      • 2019-04-15
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2018-05-01
      • 2022-12-14
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多