我有一个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配置,我只是找不到它?
答案 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