【Azure Function App】解决Function App For Container 遇见ServiceUnavailable的异常

简介: 【Azure Function App】解决Function App For Container 遇见ServiceUnavailable的异常

问题描述

在使用Terraform创建Function App 后,部署函数时候遇见 ServiceUnavailable (Bad Request -- Encountered an error (ServiceUnavailable) from host runtime.) 问题。

查看Function App的高级工具(Kudu)站点和默认站点,均出现 Application Error页面。

 

问题解答

查看Function App的Azure管理页面,有提示错误消息“ Configure Container Settings “  , 但是点击后,却没有任何反应, 无法查看具体的消息.

然后查看Function App的部署中心页面, 也是没有任何信息输出,页面空白。

根据此处判断,UI上一定有JS错误,所以启用浏览器开发者模式(F12),查看Console中的错误信息。发现报错:Incorrect fxVersion set in the site config: DOCKER。

判断出,是Function App for Container关于DOCKER的配置错误,所以对比一个正确的Function App Container发现关键信息为:

因为对LinuxFxVersion的配置只说明了DOCKER,没有指定正确的Image 路径,所以Function App 无法加载部署中心,同时也无法正确的运行DOCKER指令和Kudu站点。

 

解决办法

通过az functionapp config set 指令,修改 --linux-fx-version的值,如:

az functionapp config set 
 --name <FUNCTION_APP>
 --resource-group <RESOURCE_GROUP>
 --linux-fx-version --% "DOCKER|mcr.microsoft.com/azure-functions/dotnet:4-appservice-quickstart"

For Windows)注意:因为在Powershell中 ”|“是终止符,所以如果没有特殊说明,执行上面的语句会下面的错误:

'mcr.microsoft.com' is not recognized as an internal or external command, operable program or batch file.

所以,需要加上 停止分析 (--%) 标记来阻止 PowerShell 将输入解释为 PowerShell 命令:

或者是在Terraform中对linux-fx-version赋予完整的值。

  • linux_fx_version - (Optional) Linux App Framework and version for the AppService, e.g. DOCKER|(golang:latest).

 

修改后,Function App页面恢复正常。

 

 

参考资料

Pin to a specific version on Linux: https://learn.microsoft.com/en-us/azure/azure-functions/set-runtime-version?tabs=portal#manual-version-updates-on-linux

Terraform设置Function App Linux fx version:https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/function_app#linux_fx_version

相关文章
|
11月前
|
Java 应用服务中间件 API
【App Service】部署War包到Azure云上遇404错误
Java应用部署至Azure App Service for Windows后报404,本地运行正常。经排查,日志提示类文件版本不兼容:应用由Java 17(class file version 61.0)编译,但环境仅支持到Java 11(55.0)。错误根源为Java版本不匹配。调整App Service的Java版本至17后问题解决,成功访问接口。
1197 3
|
11月前
|
存储 Linux 网络安全
【Azure App Service】Root CA on App Service
Azure App Service for Windows应用连接外部SSL服务时,需确保其证书由受信任的根CA颁发。多租户环境下无法修改根证书,但ASE(单租户)可加载自定义CA证书。若遇证书信任问题,可更换为公共CA证书或将应用部署于ASE并导入私有CA证书。通过Kudu的PowerShell(Windows)或SSH(Linux)可查看当前受信任的根证书列表。
249 13
|
API 网络架构 容器
【Azure Container App】查看当前 Container App Environment 中的 CPU 使用情况的API
在扩展 Azure Container Apps 副本时,因 Container App Environment 的 CPU 核心数已达上限(500 cores),导致扩展失败。本文介绍如何使用 `az rest` 命令调用 Azure China Cloud 管理 API,查询当前环境的 CPU 使用情况,并提供具体操作步骤及示例。
393 17
|
12月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
301 1
|
人工智能 Python
083_类_对象_成员方法_method_函数_function_isinstance
本内容主要讲解Python中的数据类型与面向对象基础。回顾了变量类型(如字符串`str`和整型`int`)及其相互转换,探讨了加法在不同类型中的表现。通过超市商品分类比喻,引出“类型”概念,并深入解析类(class)与对象(object)的关系,例如具体橘子是橘子类的实例。还介绍了`isinstance`函数判断类型、`type`与`help`探索类型属性,以及`str`和`int`的不同方法。最终总结类是抽象类型,对象是其实例,不同类型的对象有独特运算和方法,为后续学习埋下伏笔。
356 7
083_类_对象_成员方法_method_函数_function_isinstance
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
407 17
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
411 11
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
1167 1

热门文章

最新文章