У меня есть простой шаблон ARM, который развертывает две Azure функции, план обслуживания приложения и учетную запись хранения:
Only " Особая особенность заключается в том, что функция function-key-issue-two
добавляет ключ хоста по умолчанию из функции function-key-issue-one
в качестве настройки приложения:
"FunctionOneKey": "[listkeys(concat(variables('functionTwoAppId'), '/host/default/'),'2016-08-01').functionKeys.default]",
Если я разверну этот шаблон в новая группа ресурсов, работает с первого раза. Каждое последующее развертывание завершается с ошибкой Bad Request на ресурсе function-key-issue-one / default :
Вот так выглядят подробности операции:
{
"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, который я использую, доступен здесь . Вы можете развернуть его, используя. например, New-AzResourceGroupDeployment
командлет:
New-AzResourceGroupDeployment -ResourceGroupName 'function-key-issue-rg' -TemplateFile "D:\sources\issues\functionDeployment\azuredeploy.json" -name "azuredeploy-$(New-Guid)"
Обновление 1:
Причина ошибки ServiceUnavailable
, вероятно, связана с тем, что Kudu добавляет веб. 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>
Моя следующая попытка была предотвратить Куду от этого, установив SCM_TOUCH_WEBCONFIG_AFTER_DEPLOYMENT
в 0
(см .: Не трогайте web.config в конце развертывания ). И теперь похоже, что последующие развертывания иногда завершаются успешно:
Но все еще не является надежным решением: - /.
Обновление 2:
- Та же проблема с Azure Функция Runtime
~2
. - Переключение функции Azure до Linux также не решает проблему.
Обновление 3:
- Я открываю проблему GitHub относительно этой топи c.
Есть идеи, что здесь не так? Есть обходные пути?