Azure Functions:如何通过自动化设置 CORS?

Azure Functions: how to set CORS via automation?

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

我在 Azure 门户网站中找到了执行此操作的位置 ui, 在 'Platform Features' 选项卡 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#cors) 中,但我找不到任何有关通过 azure cli 或我设置的 VSTS 部署任务修改该设置的信息,当我更改应用程序中的功能。

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

看来必须有一种不使用 web 修改 CORS 配置的方法UI,我只是没有找到它吗?

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

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

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 步骤来部署它并根据我要部署到的环境替换所需的功能应用程序名称。

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

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

我用Azure CLI to automate the CORS setup. Please refer to How to set CORS via Automation for Azure Functions

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

您还可以 check/display 现有条目,如下所示:

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