問題描述
在使用Terraform創(chuàng)建Function App 后怀各,部署函數(shù)時(shí)候遇見 ServiceUnavailable (Bad Request -- Encountered an error (ServiceUnavailable) from host runtime.) 問題刻剥。
查看Function App的高級工具(Kudu)站點(diǎn)和默認(rèn)站點(diǎn)蜕琴,均出現(xiàn) Application Error頁面整葡。
問題解答
查看Function App的Azure管理頁面,有提示錯(cuò)誤消息“ Configure Container Settings “ , 但是點(diǎn)擊后,卻沒有任何反應(yīng), 無法查看具體的消息.
然后查看Function App的部署中心頁面, 也是沒有任何信息輸出,頁面空白陶夜。
根據(jù)此處判斷浦译,UI上一定有JS錯(cuò)誤,所以啟用瀏覽器開發(fā)者模式(F12)杖虾,查看Console中的錯(cuò)誤信息烂瘫。發(fā)現(xiàn)報(bào)錯(cuò):Incorrect fxVersion set in the site config: DOCKER。
判斷出奇适,是Function App for Container關(guān)于DOCKER的配置錯(cuò)誤坟比,所以對比一個(gè)正確的Function App Container發(fā)現(xiàn)關(guān)鍵信息為:
因?yàn)閷inuxFxVersion的配置只說明了DOCKER,沒有指定正確的Image 路徑芦鳍,所以Function App 無法加載部署中心,同時(shí)也無法正確的運(yùn)行DOCKER指令和Kudu站點(diǎn)葛账。
解決辦法
通過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)注意:因?yàn)樵赑owershell中 ”|“是終止符籍琳,所以如果沒有特殊說明菲宴,執(zhí)行上面的語句會下面的錯(cuò)誤:
'mcr.microsoft.com' is not recognized as an internal or external command, operable program or batch file.
所以,需要加上 停止分析 (
--%
) 標(biāo)記來阻止 PowerShell 將輸入解釋為 PowerShell 命令:
image.png
或者是在Terraform中對linux-fx-version賦予完整的值巩割。
linux_fx_version
- (Optional) Linux App Framework and version for the AppService, e.g.DOCKER|(golang:latest)
.
修改后裙顽,F(xiàn)unction App頁面恢復(fù)正常。
參考資料
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設(shè)置Function App Linux fx version:*https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/function_app#linux_fx_version *
當(dāng)在復(fù)雜的環(huán)境中面臨問題宣谈,格物之道需:濁而靜之徐清愈犹,安以動(dòng)之徐生。 云中闻丑,恰是如此!