在支援部署插槽的託管方案中,您的函式應用程式可以執行稱為插槽的個別執行個體。 每個插槽都是獨立的環境,擁有自己的主機名稱。 是否能存取某個時隙的端點,取決於您為該時隙設定的網路與存取限制。 其中一個插槽一律是生產插槽,而您可以視需要將可用的預備插槽與生產插槽互換。
可用的位置數目取決於您的特定裝載選項:
| 裝載選項 | 位置 (包括生產環境) |
|---|---|
| 使用量方案 | 2(一個生產時段和一個分階段時段) |
| 彈性使用量方案 | 目前不支援。 關於零停機部署,請參閱彈性使用量中的網站更新原則。 |
| 進階方案 | 3 |
| 專用 (App Service) 方案 | 1-20 |
| Azure 容器應用程式 | 部署插槽不適用。 使用 修訂。 |
請在本文頂端選擇您的主機方案,以查看適用於您功能應用程式的指引。
在彈性使用量上部署時沒有插槽
彈性使用量方案不支援部署插槽。 對於受控釋出和零停機部署,請使用 滾動更新作為網站更新策略。
在 Azure 容器應用程式 上使用修訂進行部署
Azure 容器應用程式上的 Azure Functions 不使用部署插槽。 使用 修訂 來管理及導引函式應用程式各個版本之間的流量。
在消費型、高級型和專用型方案中,部署時段的行為如下:
- 在路由切換期間,新的函式觸發叫用會路由至交換後的插槽,無須明確重新啟動應用程式。
- 插槽交換並不保證零停機時間。 目前執行中的函式可能會被終止,且在擴充應用程式的插槽交換操作中,可用性可能會降低。 若要了解如何撰寫無狀態和防禦性函式,請檢閱改善 Azure Functions 的效能和可靠性。 如果要求零停機部署,可以考慮以 Flex Consumption 計畫搭配滾動更新作為網站更新策略。
為何要使用位置?
使用部署位置有許多優點,包括:
- 不同環境用於不同用途:透過使用不同的時段,你可以在切換到生產環境或預備時段前區分應用程式實例。
- 預熱:部署到某個時段,而不是直接到生產環境,讓應用程式在上線前先暖身。 此外,使用部署位置也能降低 HTTP 觸發的工作負載延遲。 執行個體會在部署之前進行準備,以減少新部署函式的冷啟動。
- 容易後援:與生產環境交換之後,含有之前預備應用程式的位置,現已擁有之前的生產應用程式。 如果你換進生產槽的變更不符合預期,你可以立刻逆轉,拿回「最後已知正常的實例」。
- 最小化重新啟動:變更生產位置中的應用程式設定需要重新啟動執行中的應用程式。 您可以改為變更預備位置中的設定,並將設定變更交換至生產環境,並使用預先建立的執行個體。 位置是在 Functions 執行階段版本之間移轉,同時維持最高可用性的建議方式。 若要深入了解,請參閱最短停機時間更新。
交換作業
在交換過程中,一個槽位是訊號源,另一個是目標。 來源插槽會放置你套用到目標插槽的應用程式實例。 下列步驟有助於減少切換期間目標插槽的停機時間:
套用設定: 將目標插槽的設定套用到所有來源插槽的實例。 例如,將生產設定套用到暫存實例。 套用的設定包括下列類別:
- 位置特定應用程式設定及連接字串 (如果適用)
- 持續部署設定 (如已啟用)
- App Service 驗證設定 (如已啟用)
等候重新啟動和可用性:交換會等候來源位置中的每個執行個體完成重新啟動,並可供要求使用。 如果有任何執行個體無法重新啟動,交換作業會還原來源位置的所有變更,並停止作業。
更新路由設定:如果來源插槽上的所有執行個體皆成功完成預熱,兩個插槽就會藉由切換路由規則來完成交換。 完成此步驟後,目標位置 (例如生產位置) 會擁有先前在來源位置進行準備的應用程式。
重複作業:現在來源位置具有先前在目標位置中的交換前應用程式,請套用所有設定並重新啟動來源位置的執行個體來完成相同的作業。
請記住下列幾點:
在交換作業的任何時間點,交換應用程式的初始化會發生在來源位置上。 不論交換成功或失敗,來源位置在進行準備期間,目標位置都會保持線上狀態。
若要將預備位置與生產位置互換,請確保生產位置一律是目標位置。 這樣交換作業才不會影響您的實際執行應用程式。
請在開始交換作業之前,將與事件來源和繫結相關的設定設為部署位置設定。 事先將其標示為「黏性」,可確保將事件和輸出導向至適當的執行個體。
在您建立新的預備環境插槽時,入口網站會在新插槽中建立來自實際執行插槽的所有現有設定,無論該設定的黏性為何。
管理設定
有些設定是針對特定插槽的。 以下列出更換槽位時哪些設定會改變,哪些設定保持不變。
位置特定設定:
- 發行端點
- 自訂網域名稱
- 非公用憑證和 TLS/SSL 設定
- 調整大小設定
- IP 限制
- Always On
- 診斷設定
- 跨原點資源共用 (CORS)
- 私人端點
非位置特定設定:
- 一般設定,如框架版本、32/64 位元及網頁套接字
- 應用程式設定 (可以設定為停在某一個位置)
- 連接字串 (可以設定為停在某一個位置)
- 處理常式對應
- 公開憑證
- 混合式連線*
- 虛擬網路整合 *
- 服務端點*
- Azure 內容傳遞網路*
依設計,不會交換以星號 (*) 標記的功能。
附註
某些適用於未更換設定的應用程式設定並沒有被更改。 例如,由於診斷設定不會交換,因此相關的應用程式設定(例如 WEBSITE_HTTPLOGGING_RETENTION_DAYS 和 DIAGNOSTICS_AZUREBLOBRETENTIONDAYS)也不會交換,即使它們未顯示為插槽設定。
建立部署設定
您可以將設定標示為部署設定,使其成為「黏性」。 黏性設定不會與應用程式執行個體交換。
如果你在一個槽位建立部署設定,務必在交換涉及的其他槽位中建立相同設定並設定唯一值。 如此一來,雖然設定的值不會變更,但設定名稱會在位置之間保持一致。 此名稱一致性可確保您的程式碼不會嘗試存取某個位置而非另一個位置中定義的設定。
請使用下列步驟來建立部署設定:
在函式應用程式中,移至部署插槽,然後選取插槽名稱。
選取 [設定],然後選取您想要與目前位置保持一起的設定名稱。
選取 [部署位置設定],然後選取 [確定]。
設定區關閉後,選擇 儲存 以保留變更。
將應用程式部署至插槽
當您建立位置時,位置是空的。 您可以使用任何支援的部署技術,將應用程式部署到位置。
部署插槽如何縮放
所有位置都會調整為與生產位置相同的背景工作角色數目。
- 針對取用方案,位置會隨著函數應用程式縮放而調整。
- 針對 App Service 方案,應用程式會調整為固定的背景工作角色數目。 位置會在與應用程式方案相同的背景工作角色數目上執行。
檢視位置
你可以透過 Azure CLI 或 Azure 入口網站查看現有時段的資訊。
請使用以下步驟查看入口網站中現有的名額:
打開你的功能應用程式。
選擇 部署時段 並查看現有時段。
新增位置
你可以透過 Azure CLI 或 Azure 入口網站新增插槽。
使用下列步驟在入口網站中建立位置:
打開你的功能應用程式。
選取 [部署位置],然後選取 [+ 新增位置]。
鍵入位置的名稱,然後選取 [新增]。
你也可以用 Azure Resource Manager(ARM)範本或 Bicep 檔案來建立欄位。 如需如何使用部署位置在取用方案中建立函數應用程式的範例,請參閱此 Azure Resource Manager 快速入門。
存取位置資源
您可使用與生產位置相同的方式,存取預備位置中的資源 (HTTP 觸發程序和管理員端點)。 不過,您在要求 URL 中使用位置特定的主機名稱 (而不是函式應用程式主機名稱),以及任何位置特定的索引鍵。 因為預備位置是即時應用程式,因此您必須像在生產位置一樣,在預備位置保護您的函式。
交換位置
您可以使用 Azure CLI 或 Azure 入口網站,切換實際執行環境內外的插槽。
使用下列步驟將預備位置交換至生產環境:
前往函式應用程式。
選取 [部署位置],然後選取 [交換]。
確認交換的組態設定,然後選取 [交換]。
交換作業可能需要幾秒鐘的時間。
復原交換
如果交換作業發生錯誤,或你想要取消該次交換,你可以回滾至初始狀態。 若要回到交換前的狀態,請執行另一個交換來反轉交換。
移除位置
你可以透過使用 Azure CLI 或 Azure 入口網站來移除插槽。
在入口網站中使用下列步驟,從您的應用程式中移除位置:
在函式應用程式中,移至部署插槽,然後選取插槽名稱。
選取 [刪除] 。
鍵入您要刪除的部署位置名稱,然後選取 [刪除]。
關閉確認窗格。
變更 App Service 方案
對於在 App Service 方案下運行的功能應用程式,你可以更改底層的 App Service 方案來換取時段。
請使用下列步驟來變更位置的 App Service 方案:
在函式應用程式中,移至部署插槽,然後選取插槽名稱。
在 [App Service 方案] 下,選取 [變更 App Service 方案]。
選取您要升級至的方案,或建立新的方案。
選取 [確定]。
考量
Azure Functions 部署位置有下列考量:
- 應用程式可用的位置數目取決於方案。 使用量方案總共支援兩個插槽:實際執行插槽和一個預備插槽。 在其他方案下執行的應用程式會有更多位置可用。 如需詳細資料,請參閱服務限制。
- 交換位置會為
AzureWebJobsSecretStorageType應用程式設定等於files的應用程式重設金鑰。 - 啟用插槽時,入口網站會將函式應用程式設為唯讀模式。
- 當您的函式應用程式使用 受保護的儲存體帳戶 作為其預設儲存體帳戶(設定於
AzureWebJobsStorage)時,位置交換可能會失敗。 如需詳細資訊,請參閱WEBSITE_OVERRIDE_STICKY_DIAGNOSTICS_SETTINGS參考。 - 使用小於 32 個字元的函數應用程式名稱。 超過32個字元的名稱可能會造成 主機ID碰撞。