【发布时间】:2020-06-11 05:43:05
【问题描述】:
我有一个简单的 ARM 模板,它部署了两个 Azure Functions、一个应用服务计划和一个存储帐户:
唯一的“特殊”之处在于,function-key-issue-two 函数将 function-key-issue-one 函数中的 默认主机密钥 添加为应用设置:
"FunctionOneKey": "[listkeys(concat(variables('functionTwoAppId'), '/host/default/'),'2016-08-01').functionKeys.default]",
如果我将此模板部署到 new 资源组,它会第一次工作。每次后续部署都会失败,并在资源 function-key-issue-one/default 上出现 Bad Request 错误:
操作细节如下:
{
"Code": "BadRequest",
"Message": "Encountered an error (ServiceUnavailable) from host runtime.",
"Target": null,
"Details": [
{
"Message": "Encountered an error (ServiceUnavailable) from host runtime."
},
{
"Code": "BadRequest"
},
{
"ErrorEntity": {
"Code": "BadRequest",
"Message": "Encountered an error (ServiceUnavailable) from host runtime."
}
}
],
"Innererror": null
}
如果我删除 FunctionOneKey 应用程序设置,部署工作。此外,如果我没有指定应用程序设置WEBSITE_RUN_FROM_PACKAGE,部署也可以。
稍后使用 AzureFunctionApp@1 Azure DevOps 任务作为 Zip 包部署功能代码(这就是我将 WEBSITE_RUN_FROM_PACKAGE 设置为 1 的原因。
如何重现:
我使用的 ARM 模板在 here 可用。
您可以使用它来部署它。 e. G。 New-AzResourceGroupDeployment cmdlet:
New-AzResourceGroupDeployment -ResourceGroupName 'function-key-issue-rg' -TemplateFile "D:\sources\issues\functionDeployment\azuredeploy.json" -name "azuredeploy-$(New-Guid)"
更新 1:
ServiceUnavailable错误的原因可能是因为Kudu添加了一个带有重写规则的web.config(因为我使用WEBSITE_RUN_FROM_PACKAGE但没有部署该功能):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name = "Site Unavailable" stopProcessing = "true">
<match url = ".*" />
<action type = "CustomResponse" statusCode = "503" subStatusCode = "0" statusReason = "Site Unavailable" statusDescription = "Could not download zip" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我的下一个尝试是通过设置来阻止 Kudu 这样做
SCM_TOUCH_WEBCONFIG_AFTER_DEPLOYMENT 到 0(参见:Don't touch web.config at the end of the deployment)。现在看起来,后续部署有时会成功:
但仍然不是一个可靠的解决方案 :-/.
更新 2:
- Azure 函数运行时
~2存在相同问题。 - 将 Azure Function 切换到 Linux 也不能解决问题。
更新 3:
- 我就这个话题开了一个GitHub issue。
知道这里有什么问题吗?有什么解决方法吗?
【问题讨论】:
-
部署成功时资源的部署顺序是否一致?不确定,但您是否尝试过更改部署顺序(使用dependsOn),以便function-key-issue-one 及其所有子资源在诸如function-key-issue-two 之类的任何东西开始之前完成?
-
是的,错误和成功部署的顺序相同。我也已经尝试过使用不同的 dependsOn 配置 - 没有成功。不过,感谢您的帮助!
标签: azure azure-devops azure-functions azure-resource-manager