当前位置: 首页 > 知识库问答 >
问题:

Linux 消费计划上的 Dotnet 隔离 Azure 函数 w/ .Net 6 抱怨 6.0 AspNetCore.App 运行时不可用

吕华彩
2023-03-14

我需要一些帮助,以确定为什么部署到Linux消费计划的Azure功能无法启动,并抱怨AspNetCore。应用运行时不可用:

应用洞察日志

我不太明白的是,为什么会引用RC2。我们已经将问题隔离到包依赖项(<code>StackExchange.Redis.Extensions.AspNetCore“Version=“7.2.1”</code>)-如果我们包含此项,它会破坏Azure中部署的功能。

查看该依赖项的源代码,似乎他们所做的只是引用 AspNetCore.App html" target="_blank">框架引用,如下所示:

https://github.com/imperugo/StackExchange.Redis.Extensions/blob/master/src/aspnet/StackExchange.Redis.Extensions.AspNetCore/StackExchange.Redis.Extensions.AspNetCore.csproj

请注意,我们的Azure函数能够运行。Net 5,具有相同的项目引用(相同lib的6.x版本),没有任何问题。

我们使用CLI来创建和部署该功能,如下所示:

构建:

        - task: UseDotNet@2
          inputs:
            version: $(dotNetVersion)
          displayName: Set DotNet Version $(dotNetVersion)                       

        - task: DotNetCoreCLI@2
          inputs:
            command: 'build'
            projects: '**/xyz.Function.OurFunction.csproj'
            arguments: '--configuration $(buildConfiguration) --output $(System.DefaultWorkingDirectory)/func_api'
          displayName: 'Build Function'

函数应用创建:

az functionapp create --name $(functionAppName)
   --resource-group $(rg) --consumption-plan-location $(region) 
   --functions-version 4 --os-type Linux --runtime dotnet-isolated 
   --storage-account $(funstorageAccountName) --assign-identity '[system]'

部署:

          - task: AzureFunctionApp@1
            inputs:                
              azureSubscription: '$(azureSubscription)'
              appType: 'functionAppLinux'
              appName: '$(functionAppName)'
              package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
              deploymentMethod: 'zipDeploy'
              runtimeStack: 'DOTNET-ISOLATED|6.0'
              appSettings: >-
                -FUNCTIONS_WORKER_RUNTIME dotnet-isolated

共有2个答案

江华容
2023-03-14

在功能应用程序中,您需要添加应用程序设置SCM_DO_BUILD_DURRING_DEPLOYMENT

在某些情况下,你可能无法将应用部署到消耗计划中的 Linux Azure Functions。如果发生这种情况,请添加一个名为 SCM_DO_BUILD_DURING_DEPLOYMENT 的应用程序设置,其值为 0

参考这里

后星河
2023-03-14

以下是我如何在我的特定案例中解决这个史诗。
在 .csproj 属性中,

我遇到的第一个问题是尝试部署 ZIP 项目的 Azure 函数应用部署发布管道任务。即使这是微软的建议,这也将无限期地挂起。因此,之前有一个提取文件任务,它将 $(System.DefaultWorkingDirectory)/func/drop/Functions.zip解压缩为 $(Agent.TempDirectory)/func。在我的情况下,func是工件源别名。

据我所知,Azure功能应用程序部署任务已过时
默认情况下,您可能选择的最新运行时堆栈是DOTNET|3.1(functionapp v3)
然后,在任务日志中,会注意到:
正在尝试更新应用程序服务应用程序设置
数据:{“FUNCTIONS_WORKER_RUNTIME”:“dotnet”,“WEBSITES_ENABLE_APP_SERVICE_STORAGE”:“true”}
这是非常意外的,因为我们使用的是进程外模型
此外,启动命令为空
尝试使用<code>func azure functionapp publish$(函数应用程序名称)——没有绑定程序
和<code>dotnet函数。dll无效。

msdocs 链接如下:
与运行进程内 .NET 隔离项目指南 的 .NET 类库函数相比,在进程外运行的功能和行为差异

Linux 上的手动版本更新

因此,在部署之后,有一个Azure应用服务设置任务,它设置< code > " FUNCTIONS _ WORKER _ RUNTIME ":" dot net-isolated " 。

然后救世主就是这个向导。

[!注意]若要能够将独立函数项目发布到 Azure 中的 Windows 或 Linux 函数应用,必须在远程FUNCTIONS_WORKER_RUNTIME应用程序设置中设置 dotnet-isolated 的值。若要支持 zip 部署并从 Linux 上的部署包运行,还需要将 linuxFxVersion 站点配置设置更新为 DOTNET-ISOLATED|6.0。

部署报告成功,函数应用程序表示函数主机未运行。

当我运行 az functionapp config show --name $(functions-app) --resource-group $(rg) --query 'linuxFxVersion' -o tsv I get DOTNET|3.1.

所以我做az Functionapp config set--name$(Functions-app)--resource-group$(rg)--linux-fx-version'DOTNET-ISOLATED|5.0',因为我的目标是netcore5。这修复了一切,并在发布管道中部署后成为Azure CLI任务。

 类似资料:
  • 应用程序服务计划和消费计划中运行的Azure函数的行为差异。为什么? 我正在运行WkHtmlToPdf.exe,作为应用服务计划(B1)中Azure函数的一部分。我想将此Azure函数移至消耗计划,但似乎失败了。 我追踪到阻塞点是WkHtmlToPdf。exe,通过使用Kudo控制台。 使用消费计划中的Azure函数,它只会以死锁结束,永远不会返回控制台。 有什么想法吗?

  • 我在Linux消费计划上有一个Azure函数应用程序,它有两个队列触发器。两个队列触发器都将<code>batchSize 如果我希望允许这两个队列触发器并发运行,但不希望它们的规模超过这个范围,那么将< code > functionAppScaleLimit 设置为< code>2是否足以实现这一点? 编辑:添加了新的示例,感谢@Hury沈为这些示例提供框架 现在,我想我将继续使用最后一个示例

  • 我一直在尝试以多种不同的方式在windows上构建fltk,但最终我总是得到: 配置:错误:C编译器无法创建可执行文件(msys fltk/配置) 或 检查C编译器是否正常工作:C:/MinGW/bin/gcc.exe--已损坏(CMake-gui) 我用fltk 1.3.0和1.3.3试用过它,我甚至用过三个不同的MinGW发行版,GCC版本:。但它无法编译。以下是由生成的一些错误日志/配置文件

  • 我们希望将现有Azure Web应用程序的应用程序服务计划从独立服务计划更改为独立的“v2”服务计划。订阅、资源组或区域没有更改。对我们来说,一个条件是,我们想继续使用相同的Web应用程序,仅更改计划即可。如果可能的话,请告诉我,我们如何改变这一点。 我可以在Azure Portal中看到“更改应用程序服务计划”选项,但我无法通过涉猎了解计划更改的具体情况 我们可以单独创建所需的独立V2计划,但到

  • 问题内容: 在安装过程中,Magento会产生以下错误: 数据库服务器不支持InnoDB存储引擎。 我已经修复了Magento的所有依赖关系,并使用SHOW ENGINES在命令行上使用MySQL进行了仔细检查,并且肯定有InnoDB可用(也是默认的存储引擎)。 这不是其他人在安装时可能会看到的有关访问MySQL配置的问题。 注意:这是在Mac Pro上运行的(对我正在开发的域名进行简单的主机DN

  • 我有一个azure函数v3,用C#写的,用类库的方法。 < li >该功能由blob存储触发。 < li >该功能正在使用消费计划。 问题是冷启动可能长达30分钟!我已经查阅了这个链接的文档 但是没有关于预期冷起动正时的具体数字。 一个有趣的观察是,如果我导航到门户,并点击刷新按钮: 那么该功能会立即被触发。 这是正常的预期行为吗 您能给我指一下任何明确说明消费计划中冷启动时间为0-30-50分钟