共用方式為


將函數應用程式重新放置到另一個 Azure 區域

本文說明如何將 Azure Functions 託管的函數應用程式移至另一個 Azure 區域。

有各種原因讓您想要將現有的 Azure 資源從某個區域移至另一個區域。 您可能想要:

  • 利用新的 Azure 區域。
  • 只部署特定區域中可用的功能或服務。
  • 符合內部原則和治理需求。
  • 與公司合併和收購保持一致
  • 符合容量規劃需求。

託管函數應用程式的 Azure 資源是區域專屬的,無法跨區域移動。 相反地,您必須在目標區域中建立現有函數應用程式資源的複本,然後將函數程式碼重新部署至新的應用程式。

只要這些相同資源留在相同區域中,您就可以將這些資源移至另一個資源群組或訂用帳戶。 如需詳細資訊,請參閱將 App Service 資源移至新的資源群組或訂用帳戶

必要條件

  • 請確定目標區域支援您想移動其資源的 Azure Functions 及任何相關服務。
  • 請確定您有權限可在新的區域中建立所需的資源。

準備

識別來源區域上使用的所有函數應用程式資源,這可能包括:

準備將應用程式移至新區域時,架構中有一些部分需要進行特殊的考量和規劃。

函式應用程式名稱

函數應用程式名稱在所有 Azure 應用程式中必須是全域唯一的。 這表示新函數應用程式的名稱和 URL 不能與原始函數應用程式的相同。 即使使用自訂 DNS 時也是如此,因為基礎 <APP_NAME>.azurewebsites.net 仍必須是唯一的。 您可能需要更新任何連線到函數應用程式上 HTTP 端點的用戶端。 這些用戶端在提出要求時必須使用新的 URL。

原始程式碼

理想情況下,您會在某種程式碼存放庫中保有一份原始程式碼,如果您是在 Linux 容器中執行,則會在容器存放庫中保有原始程式碼。 如果您使用持續部署,請規劃將存放庫或容器部署連線切換至新的函數應用程式位址。 如果基於某些原因,您不再擁有該原始程式碼,便可以從原始的函數應用程式下載目前正在執行的套件。 建議您將原始程式檔儲存在程式碼存放庫中,並使用持續部署來進行更新 (部分機器翻譯)。

預設儲存體帳戶

Functions 主機需要 Azure 儲存體帳戶。 如需詳細資訊,請參閱儲存體帳戶需求。 為獲得最佳效能,您的函數應用程式應該使用同一區域中的儲存體帳戶。 當您在新區域中建立使用新儲存體帳戶的新應用程式時,您的應用程式會獲得一組新的函數存取金鑰 (部分機器翻譯),且任何觸發程序 (例如計時器觸發程序) 的狀態會重設。

持續的本機儲存

函數執行是刻意無狀態的。 不過,我們不會阻止您將資料寫入本機檔案系統。 您可以將應用程式所產生和使用的資料儲存在 %HOME%\site 虛擬磁碟機上,但此資料不應與狀態有所關聯。 如果您的案例需要您在兩次函數執行之間維持狀態,請考慮改用 Durable Functions

如果您的應用程式將資料保存到應用程式的共用儲存體路徑,請務必規劃如何在資源移動期間管理該狀態。 請記住,針對專用 (App Service) 方案應用程式,該共用是網站的一部分。 針對使用量方案和進階方案,該共用預設是預設儲存體帳戶中的 Azure 檔案儲存體共用。 在 Linux 上執行的應用程式可能會使用明確的裝載共用來進行持續性儲存。

已連接服務

您的函數可能會使用服務 SDK 或觸發程序和繫結來連線到 Azure 服務和其他資源。 當應用程式移至新區域時,已連線的服務都可能會受到負面影響。 如果延遲或整個服務都發生問題,也請考慮將已連線的服務都移至新的區域。 若要了解如何跨區域移動這些資源,請參閱個別服務的文件。 在移動具有已連線的服務的應用程式時,您可以考慮在移動期間使用跨區域災害復原和商務持續性策略。

在變更已連線的服務時,您可能需要更新應用程式設定中儲存的值,這些值會用來連線到這些服務。

組態

  • 您可以從 Azure 入口網站擷取現有應用程式設定和連接字串的快照集。 展開 [設定]>[環境變數],選取 [應用程式設定] 或 [連接字串] 底下的 [進階編輯],然後儲存包含現有設定或連線的 JSON 輸出。 您必須在新區域中重新建立這些設定,但值本身可能會因為已連線的服務中的後續區域變更而有所變更。

  • 現有的 Key Vault 參考 (部分機器翻譯) 無法跨 Azure 地理邊界匯出。 您必須在新區域中重新建立任何所需的參考。

  • 您的應用程式組態可能由 Azure 應用程式組態管理,或從其他一些中央 (下游) 資料庫相依性進行管理。 請檢閱任何應用程式組態存放區或類似的存放區,以取得可能需要修改的環境和區域特定設定。

自訂網域

如果您的函數應用程式使用自訂網域,請事先將其繫結至目標應用程式在目標應用程式中驗證並啟用網域。 在移動後,您必須重新對應網域名稱。

虛擬網路

Azure Functions 可讓您整合您的應用程式與虛擬網路資源,甚至讓其在虛擬網路中執行。 如需詳細資訊,請參閱 Azure Functions 網路功能選項。 在移至新區域時,您必須先移動或重新建立所需的一切虛擬網路和子網路資源,然後才能部署應用程式。 這包括移動或重新建立任何私人端點和服務端點。

身分識別

  • 您必須在新的目標區域中重新建立任何系統指派的受控識別以及您的應用程式。 一般來說,EasyAuth 使用的自動建立 Microsoft Entra ID 應用程式會預設為應用程式資源名稱。

  • 使用者指派的受控識別也無法跨區域移動。 若要將使用者指派的受控識別保留在與您的應用程式相同的資源群組中,您必須在新區域中重新建立這些受控識別。 如需詳細資訊,請參閱將 Azure 資源的受控識別重新放置到另一個區域

  • 向受控識別授與重新放置的服務中,與其所取代的原始身分識別相同的權限,包括群組成員資格。

憑證

App Service 憑證資源可以移至新的資源群組或訂用帳戶,但無法跨區域移動。 可以匯出的憑證也可以匯入到新區域中的應用程式或 Key Vault。 此匯出和匯入流程相當於在區域之間移動。

在規劃服務重新放置時,需要考慮不同類型的憑證:

憑證類型 Exportable 註解
受 App Service 管理 (部分機器翻譯) No 在新區域中重新建立這些憑證。
受 Azure Key Vault 管理 (部分機器翻譯) Yes 這些憑證可以從 Key Vault 匯出,然後在新區域中匯入到 Key Vault
私密金鑰 (自我管理) Yes 您在 Azure 外部取得的憑證可以從 App Service 匯出,然後匯入到新區域中的新應用程式或 Key Vault
公開金鑰 No 您的應用程式可能會有只有公開金鑰且沒有秘密的憑證,以用來存取其他受保護的端點。 請取得所需的公開金鑰憑證檔案,並將其匯入到新區域中的應用程式。

存取金鑰

Azure Functions 會使用存取金鑰來讓人更難以存取您函數應用程式中的 HTTP 端點。 這些金鑰會在預設儲存體帳戶中維持加密狀態。 當您在新區域中建立新的應用程式時,系統會建立一組新的金鑰。 您必須更新任何使用存取金鑰的現有用戶端,以在新區域中使用新的金鑰。 雖然您應該使用新的金鑰,但您也可以在新的應用程式中重新建立舊的金鑰。 如需詳細資訊,請參閱在 Azure Functions 中使用存取金鑰

停機

如果需要將停機降到最低,請考慮按照建議在這兩個區域中執行函數應用程式,以實作災害復原結構。 您實作的具體架構取決於函數應用程式中的觸發程序類型。 如需詳細資訊,請參閱 Azure Functions 服務中的可靠性

長期函式

Durable Functions 延伸模組可讓您定義協調流程,系統會使用具狀態實體在您的函數執行中維持狀態。 理想情況下,您應該讓執行中的協調流程完成後,再移轉 Durable Functions 應用程式,當打算切換至新區域中的新儲存體帳戶時,更應如此。 在移轉 Durable Functions 應用程式時,請考慮使用下列其中一個災害復原和地理分散策略

重新放置

在新區域中重新建立函數應用程式需要先重新建立 App Service 方案的 Azure 基礎結構、函數應用程式執行個體以及相關資源,例如虛擬網路、身分識別和位置。 您也必須重新連線,或在新的區域中重新建立應用程式所需的 Azure 資源。 這些資源可能包括預設的 Azure 儲存體帳戶和 Application Insights 執行個體。

然後,您可以將實際的應用程式原始程式碼或容器進行封裝,並重新部署至在新區域中執行的函數應用程式。

重新建立您的 Azure 基礎結構

在目標區域中,有數種方式可在 Azure 中建立函數應用程式和相關資源:

  • 部署範本:如果您原本使用基礎結構即程式碼 (IaC) 檔案 (Bicep、ARM 範本或 Terraform) 部署函數應用程式,則可以更新這些先前的部署,使其以新區域作為目標,並使用這些部署在新區域中重新建立資源。 如果您不再有這些部署檔案,則一律可以從 Azure 入口網站下載現有資源群組的 ARM 範本 (部分機器翻譯)。
  • Azure CLI/PowerShell 指令碼:如果您原本使用 Azure CLI 或 Azure PowerShell 指令碼部署函數應用程式,則可以更新這些指令碼,改為以新區域作為目標,然後再次執行這些指令碼。 如果您不再有這些指令碼,則您也可以從 Azure 入口網站下載現有資源群組的 ARM 範本 (部分機器翻譯)。
  • Azure 入口網站:如果您原本在入口網站中建立函數應用程式,或如果您不熟悉指令碼或 IaC 檔案的使用,則可以直接在入口網站中重新建立所有項目。 請務必使用與原始應用程式相同的主控方案 (部分機器翻譯)、語言執行階段 (部分機器翻譯) 和語言版本。

檢閱已設定的資源

如果部署期間未設定資源,請檢閱並設定在目標區域中在以上準備步驟中所識別的資源。 如果您搭配使用持續部署與受控識別驗證,請確定新的函數應用程式中存在所需的身分識別和角色對應。

重新部署您的原始程式碼

您現已準備好基礎結構,接下來可以重新封裝原始程式碼,並將其重新部署至函數應用程式。 現在是將原始程式碼或容器映像移至存放庫,並從該存放庫啟用持續部署 (部分機器翻譯) 的好時機。

您也可以使用 Azure Functions 所支援的任何其他發佈方法。 大部分的工具型發佈都需要您scm 端點上啟用基本驗證 (部分機器翻譯),但在生產應用程式上不建議您這麼做。

重新放置考量

  • 請記得驗證您的設定,並在目標區域中測試函數。
  • 如果您已設定自訂網域,請重新對應網域名稱
  • 針對在專用 (App Service) 方案中執行的函數應用程式,當方案與一或多個 Web 應用程式共用時,也請檢閱 App Service 移轉方案

清理

移動完成之後,請從來源區域刪除函數應用程式和主控方案。 即使應用程式本身未執行,您仍需在進階或專用方案中支付函數應用程式的費用。 如果您已在新區域中重新建立其他服務,則也請在確定不再需要舊版服務後將其刪除。

如需在更進階且異地備援的解決方案架構中,於多個區域中執行函數應用程式的範例,請參閱 Azure 架構中心 (部分機器翻譯)。