疑難排解錯誤:「無法連線到 Azure Functions 執行階段」

本文可協助您針對出現在 Azure 入口網站中的下列錯誤字串進行疑難排解:

「錯誤:無法連線到 Azure Functions 執行階段。 如需儲存體設定的詳細資料,請按一下這裡。」

當 Functions 執行階段無法啟動時,就會發生此問題。 此問題的最常見原因是函數應用程式已無法存取其儲存體帳戶。 如需詳細資訊,請參閱儲存體帳戶需求

本文的其餘部分可協助您針對此錯誤的特定原因進行疑難排解,包括如何識別和解決每個案例。

儲存體帳戶已刪除

每個函式應用程式都需要有儲存體帳戶才能運作。 如果該帳戶已刪除,您的函式就不會運作。

請先在應用程式設定中查閱您的儲存體帳戶名稱。 AzureWebJobsStorageWEBSITE_CONTENTAZUREFILECONNECTIONSTRING 會在連接字串中包含您的儲存體帳戶名稱。 如需詳細資訊,請參閱 Azure Functions 的應用程式設定參考

在 Azure 入口網站中搜尋您的儲存體帳戶,以了解其是否仍存在。 如果已遭刪除,請重新建立儲存體帳戶,並取代您的儲存體連接字串。 您的函式程式碼將會遺失,所以您必須加以重新部署。

儲存體帳戶的應用程式設定已刪除

在上一個步驟中,如果您找不到儲存體帳戶連接字串,其可能已刪除或覆寫。 當您使用部署位置或 Azure Resource Manager 指令碼來設定應用程式設定時,最常會刪除應用程式設定。

必要的應用程式設定

如需詳細資訊,請參閱 Azure Functions 的應用程式設定參考

指引

  • 請勿對上述任何設定核取 [位置設定]。 如果您交換部署位置,函數應用程式就會中斷。
  • 請勿將這些設定修改為自動化部署的一部分。
  • 在建立時,必須提供這些設定,且設定必須有效。 不包含這些設定的自動化部署會導致函數應用程式無法執行,即使稍後新增設定也一樣。

儲存體帳戶的認證無效

如果您重新產生儲存體金鑰,則必須更新先前討論的儲存體帳戶連接字串。 如需儲存體金鑰管理的詳細資訊,請參閱建立 Azure 儲存體帳戶

無法存取儲存體帳戶

您的函數應用程式必須能夠存取儲存體帳戶。 導致函數應用程式無法存取儲存體帳戶的常見問題包括:

每日執行配額已滿

如果您已設定每日執行配額,則會暫時停用您的函數應用程式,而導致許多入口網站控制項變成無法使用。

若要確認 Azure 入口網站中的配額,請在您的函數應用程式中選取 [平台功能]>[函數應用程式設定]。 如果您超過已設定的 [每日使用量配額],則會顯示下列訊息:

「函數應用程式已達每日使用量配額,並會一直停止到下一個 24 小時時段開始為止。」

若要解決此問題,請移除或增加每日配額,然後重新啟動您的應用程式。 否則,您的應用程式執行會遭到封鎖,直到隔天。

應用程式位於防火牆後方

您的函數應用程式可能因為下列其中一個原因而無法連線:

Azure 入口網站會直接呼叫執行中的應用程式以擷取函式清單,並對 Kudu 端點進行 HTTP 呼叫。 [平台功能] 索引標籤下的平台層級設定仍可供使用。

若要確認您的 ASE 設定:

  1. 前往 ASE 所在子網路的網路安全性群組 (NSG)。
  2. 驗證輸入規則,以允許來自您正在存取應用程式之電腦公用 IP 的流量。

您也可以從連線到執行您應用程式之虛擬網路或連線到您虛擬網路中執行之虛擬機器的電腦,使用入口網站。

如需輸入規則設定的詳細資訊,請參閱 App Service 環境的網路考量的<網路安全性群組>一節。

Linux 上的容器錯誤

對於在容器中 Linux 上執行的函數應用程式,可能會因為容器發生問題而發生Azure Functions runtime is unreachable錯誤。 使用下列程序來檢閱容器記錄中是否有錯誤:

  1. 瀏覽至函數應用程式的 Kudu 端點,該端點位於 https://<FUNCTION_APP>.scm.azurewebsites.net,其中 <FUNCTION_APP> 是您的應用程式名稱。

  2. 下載 Docker 記錄 .zip 檔案,並檢閱本機電腦上的內容。

  3. 檢查任何記錄的錯誤,指出容器無法成功啟動。

容器映像無法使用

參考的容器映像無法使用或無法正確啟動時,可能會發生錯誤。 檢查任何記錄的錯誤,指出容器無法成功啟動。

您必須更正任何導致容器無法針對函數應用程式正確執行的錯誤。

找不到容器映像時,您會在 Docker 記錄中看到 manifest unknown 錯誤。 在此情況下,您可以使用如何以 Azure Functions 執行階段版本為目標中所述的 Azure CLI 命令來變更正在參考的容器映像。 如果您已部署自訂容器映像,則需要修正該映像,並將更新的版本重新部署到參考的登錄。

應用程式容器有衝突的連接埠

您的函數應用程式可能處於沒有回應的狀態,因為啟動時發生衝突的連接埠指派。 此錯誤會於下列情況發生:

  • 您的容器有個別的服務在執行中,其中一個或多個服務繫結至與函數應用程式相同的連接埠。
  • 您已新增與函數應用程式共用相同連接埠值的 Azure 混合式連線。

根據預設,函數應用程式執行所在的容器會使用連接埠 :80。 當相同容器中的其他服務也嘗試使用連接埠 :80 時,函數應用程式可能無法啟動。 如果您的記錄顯示連接埠衝突,請變更預設連接埠。

主機識別碼衝突

從 Azure Functions 執行階段 3.x 版開始,會偵測主機識別碼衝突並記錄為警告。 在 4.x 版中,會記錄錯誤並停止主機。 如果執行時間無法啟動函數應用程式,請檢閱記錄。 如果發生有關主機識別碼衝突的警告或錯誤,請遵循主機識別碼考量中的風險降低步驟。

唯讀應用程式設定

變更任何唯讀App Service 應用程式設定可以將函數應用程式置於無法連線的狀態。

ASP.NET 驗證覆寫

僅適用於使用 Functions 主機以內含式執行的 C# 應用程式。

在 Functions 啟動類別中設定 ASP.NET 驗證,可以覆寫 Azure 入口網站與主機通訊所需的服務。 其中包括,但不限於,任何對 AddAuthentication() 的呼叫。 如果覆寫主機的驗證服務,且入口網站無法與主機通訊,則會將應用程式視為無法連線。 此問題可能會導致錯誤,例如:No authentication handler is registered for the scheme 'ArmToken'.

下一步

了解如何監視您的函數應用程式: