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

时间:2017-10-25 00:09:07

标签: azure cors azure-functions arm-template

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

我已经在azure portal web ui中找到了去哪做的事情,  在平台功能'选项卡(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 UI的情况下修改CORS配置,我只是找不到它?

3 个答案:

答案 0 :(得分:4)

Fabio的答案是正确的,Azure Resource Manager模板适用于此。由于他链接的示例是关于逻辑应用程序而不是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步骤,部署它并根据我正在部署的环境替换所需的功能应用名称。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

作为部署的一部分,我倾向于自动化功能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