Попытка использовать WEBSITE_RUN_FROM_PACKAGE = 1, но ZipDeploy не удалось с [IOException]: имя пользователя или пароль неверны

У моей команды есть FunctionApps, работающие в плане Elastic Premium. По умолчанию эти функции выполняются с использованием файлов Azure для хранения, но мы пытаемся запускать наши функции из файла пакета, поэтому избегаем этой зависимости.

Я следую этой документации: https://learn.microsoft.com/en-us/azure/azure-functions/run-functions-from-deployment-package#general-considerations

Я добавил WEBSITE_RUN_FROM_PACKAGE = 1 и удалил WEBSITE_CONTENTAZUREFILECONNECTIONSTRING/WEBSITE_CONTENTSHARE из настроек приложения. Я также обновил шаблон развертывания, чтобы использовать ZipDeploy вместо MSDeploy. Наше развертывание происходит в два этапа: сначала мы развертываем ресурсы (план, functionapp...), а затем развертываем код (ZipDeploy).

Теперь развертывание прошло успешно в одной из наших сред, но в другой мы можем развернуть приложение-функцию с правильными настройками приложения, но ZipDeploy завершается с ошибкой: IOException: неправильное имя пользователя или пароль. Что странно, потому что два приложения-функции имеют одинаковую конфигурацию.

Вот полное сообщение об ошибке:

Status: Failed
Error:
Code: TooManyRequests
Message: [IOException]: The user name or password is incorrect.

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost)
at System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean checkHost)
at System.IO.Abstractions.DirectoryWrapper.CreateDirectory(String path)
at Kudu.Core.Infrastructure.FileSystemHelpers.EnsureDirectoryIgnoreAccessExceptions(String path)
at Kudu.Services.Web.App_Start.NinjectServices.GetSettingsPath(IEnvironment environment) in C:\__w\1\s\Kudu.Services.Web\App_Start\NinjectServices.cs:line 828
at Kudu.Services.Web.App_Start.NinjectServices.EnsureValidDeploymentXmlSettings(IEnvironment environment) in C:\__w\1\s\Kudu.Services.Web\App_Start\NinjectServices.cs:line 0
at Kudu.Services.Web.App_Start.NinjectServices.RegisterServices(IKernel kernel) in C:\__w\1\s\Kudu.Services.Web\App_Start\NinjectServices.cs:line 157
at Kudu.Services.Web.App_Start.NinjectServices.CreateKernel() in C:\__w\1\s\Kudu.Services.Web\App_Start\NinjectServices.cs:line 132
at Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback)
at Kudu.Services.Web.App_Start.NinjectServices.Start() in C:\__w\1\s\Kudu.Services.Web\App_Start\NinjectServices.cs:line 97
[TargetInvocationException]: Exception has been thrown by the target of an invocation.
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at WebActivatorEx.BaseActivationMethodAttribute.InvokeMethod()
at WebActivatorEx.ActivationManager.RunActivationMethods[T](Boolean designerMode)
at WebActivatorEx.ActivationManager.Run()
[InvalidOperationException]: The pre-application start initialization method Run on type WebActivatorEx.ActivationManager threw an exception with the following error message: Exception has been thrown by the target of an invocation..
at System.Web.Compilation.BuildManager.InvokePreStartInitMethodsCore(ICollection`1 methods, Func`1 setHostingEnvironmentCultures)
at System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods)
at System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded)
at System.Web.Compilation.BuildManager.ExecutePreAppStart()
at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)
[HttpException]: The pre-application start initialization method Run on type WebActivatorEx.ActivationManager threw an exception with the following error message: Exception has been thrown by the target of an invocation..
at System.Web.HttpRuntime.FirstRequestInit(HttpContext context)
at System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)

Кроме того, если я попробую КУДО: респект

Я пытался перераспределить, но безуспешно.

Кто-нибудь сталкивался с той же проблемой при попытке использовать WEBSITE_RUN_FROM_PACKAGE = 1 и имел решение этой проблемы?


119
2

Ответы:

Когда я удалил настройки WEBSITE_CONTENTAZUREFILECONNECTIONSTRING и WEBSITE_CONTENTSHARE и повторно развернул свой триггер функции Azure в приложении-функции Azure с Elastic Premium, я получил ту же ошибку: трассировка стека Kudu была недоступна и функции не работали.

Необходимо также добавить настройки ниже и устранить The user name or password is incorrect error, Благодаря @ahmelsayed Github Комментарий и @Pravallika ТАКОЙ ответ - Восстановите ключи учетной записи хранения и добавьте новые Account keys в значения настроек WEBSITE_CONTENTAZUREFILECONNECTIONSTRING, WEBSITE_CONTENTSHARE и AzureWebJobsStorage в качестве строк подключения: -

Я повторно добавил настройки ниже как Advanced edit, и Log stream снова начал успешно работать:

Когда я повторно добавил вышеуказанные настройки, функции начали успешно работать: -

  {
    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
    "value": "DefaultEndpointsProtocol=https;AccountName=siliconrg80bd;AccountKey=<RecheckAccountKeyORRegenerate>;EndpointSuffix=core.windows.net",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_CONTENTSHARE",
    "value": "siliconfunc98085a5",
    "slotSetting": false
  },
  {
    "name": "AzureWebJobsStorage",
    "value": "DefaultEndpointsProtocol=https;AccountName=siliconrg80bd;AccountKey=<RecheckAccountKeyORRegenerate>;EndpointSuffix=core.windows.net",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "1",
    "slotSetting": false
  }

Выход:-

Если вы используете Publish Profile для развертывания функций, еще раз проверьте значения имени пользователя и пароля в профиле публикации для развертывания zip ИЛИ Reset Publish profile: -

Publishprofile.publishsettings:-

 Zip Deploy" publishMethod = "ZipDeploy" publishUrl = "siliconfunc980.scm.azurewebsites.net:443" userName = "$siliconfunc980" userPWD = "yxxxxxxxxxxxxxEnC" 

Решено

Для большего контекста мы пытались использовать WEBSITE_RUN_FROM_PACKAGE = 1, потому что хотим избавиться от WEBSITE_CONTENTAZUREFILECONNECTIONSTRING и WEBSITE_CONTENTSHARE.

Это возможно согласно https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli

Если вышеизложенное правильно учтено, вы можете создать приложение без файлов Azure. Создайте приложение-функцию без указания WEBSITE_CONTENTAZUREFILECONNECTIONSTRING и WEBSITE_CONTENTSHARE настройки приложения. Вы можете избежать этих настроек, создав Шаблон ARM для стандартного развертывания, удаление двух настроек и затем развертывание шаблона.

В итоге я нашел решение своей проблемы здесь: https://github.com/projectkudu/kudu/wiki/WEBSITE_RUN_FROM_PACKAGE-and-WEBSITE_CONTENTAZUREFILECONNECTIONSTRING-Best-Practices

Лучшая практика

Настоятельно рекомендуется установить этот параметр при создании приложения. время и неизменяемы на протяжении всего времени существования приложения. На самом деле, существует нет сценария, в котором нужно было бы время от времени менять этот параметр или особенно во время развертывания. Изменение этого значения приведет к развертыванию и время выполнения приложения ведет себя некорректно, гарантированное время простоя и данные восприятие потери (развернутые файлы находятся не там, где они ожидаются) - представьте себе замену жесткого диска при установке программного обеспечения на компьютер.

TL;DR -> Удаление ресурсов перед их повторным развертыванием с новой настройкой (WEBSITE_RUN_FROM_PACKAGE = 1) устранило проблему.


Интересные вопросы для изучения

Необходимо реализовать AddKeyedSingleton с помощью функции AzureИспользование LogMetric в изолированном режиме Azure Function 8.0Функция Azure завершается сбоем из-за ошибки: неправильное имя пользователя или пароль: C:\host\LogFiles\Application\Function\HostНевозможно получить DurableClient в изолированной dotnet функции для устойчивой обработки объектовПриложение-функция Azure (python). Повторная попытка с timer_trigger не работаетОтключите TipMix и файл cookie x-ms-routing-name с веб-сайтаКак развернуть приложениеstreamlit в веб-приложении AzureПочему PWA на основе реагирования, размещенное в моей службе приложений Azure, случайно начинает возвращать ошибку 500 для ВСЕХ вызовов POST (GET работает нормально)? Исправлено: Перезапустить браузер?Центр развертывания службы приложений Azure — что делает «Отключение» и как «повторно подключиться»?План службы приложений Azure потребляет 70 % памяти без развертывания кода