建立和使用 Bicep 模組

已完成

模組是獨立的 Bicep 檔案。 通常包含一組一起部署的資源。 模組可從任何其他 Bicep 範本取用。

您可以使用模組,重複使用 Bicep 程式碼,且可以讓 Bicep 檔案更容易閱讀和理解,因為檔案各自著重於特定工作。 您的主要範本接著會將多個模組組合在一起。

模組的優點

在您的玩具公司中,您已使用許多個別 Bicep 檔案,佈建雲端資源。 一段時間後,這些範本會大幅增加。 最後,您會有難以閱讀和瀏覽的龐大程式碼,甚至難以維護。

您想要在其他範本中重複使用程式碼時,此方法也會強制複製部分程式碼。 您變更某個部分時,必須搜尋並更新多個檔案。

Bicep 模組可將程式碼分割成更小、更容易管理的檔案,且可供多個範本參照,藉此協助您解決這些挑戰。 模組提供一些重要優點。

重複使用性

建立模組之後,可以在多個 Bicep 檔案中重複使用該模組,即使檔案針對其他專案或工作負載。 例如,當您建置一個解決方案時,可能會為應用程式元件、資料庫和網路相關資源,建立個別模組。 接著,開始建置另一個具有類似網路需求的專案時,可以重複使用相關模組。

Diagram that shows a template referencing three modules: application, database, and networking. The networking module is then reused in another template.

您甚至可以與小組、組織或 Azure 社群共用模組。 您會在之後的 Microsoft Learn 課程模組中,深入了解如何共用 Bicep 模組。

封裝

模組可協助您將相關資源定義整理在一起。 例如,當您定義 Azure Functions 應用程式時,一般會部署應用程式、應用程式的主控方案,以及應用程式中繼資料的儲存體帳戶。 雖然這三個元件會分別進行定義,但代表一個資源邏輯群組,因此將這三個元件定義為一個模組會更合理。

如此一來,您的主要範本便無需注意函數應用程式部署方式的詳細資訊。 這是模組的責任。

可組合性

建立一組模組之後,您可以將這些模組組合在一起。 例如,您可以建立部署虛擬網路的模組,以及另一個部署虛擬機器的模組。 您可以為每個模組定義參數和輸出,以便從一個模組取得重要資訊,並傳送至另一個模組。

Diagram that shows a template referencing two modules and passing the output from one to the parameter of another.

提示

將 Bicep 模組視為建置組塊會非常實用,您可以用不同的方式組合這些建置組塊,並用以支援您的部署。

功能

有時候,您可能需要使用模組來存取特定功能。 例如,您可以同時使用模組和迴圈,部署多組資源。 您也可以使用模組,定義單一部署中不同範圍的資源。

建立模組

模組是一般 Bicep 檔案。 建立模組的方式就像建立任何其他 Bicep 檔案一樣。

一般而言,為您部署的每個資源建立模組,並不是好做法。 好的 Bicep 模組一般會定義多個相關資源。 不過,如果您有具有許多設定,複雜的資源,建立單一模組來減少複雜度很合理。 此方法可讓您的主要範本簡單且整齊。

將現有 Bicep 範本分割成多個模組

您可以建置大型 Bicep 範本,然後決定應將其分割成多個模組。 有時候,您應該如何分割大型 Bicep 檔案是非常清楚的。 您可能有一組明確屬於模組的資源。 其他時候,判斷應分為模組的資源並不簡單。

Bicep 視覺化檢視可協助您將整個 Bicep 檔案放在檢視方塊中。 視覺化檢視在適用於 Visual Studio Code 的 Bicep 延伸模組中。

若要檢視視覺化檢視,請開啟 Visual Studio Code 總管,選取並按住 (或以滑鼠右鍵按一下) Bicep 檔案,然後選取 [開啟 Bicep 視覺化檢視]。 視覺化檢視會顯示 Bicep 檔案中資源的圖形呈現。 包含資源之間的線條,顯示 Bicep 偵測到的相依性。

您可以使用視覺化檢視,協助您分割檔案。 請考慮視覺效果是否說明任何資源叢集。 將這些叢集一起移至模組很合理。

例如,請考慮 Bicep 檔案的下列視覺效果。 定義兩組不同的資源。 將它們分到不同的「資料庫」和「網路」模組很合理。

巢狀模組

模組可以包含其他模組。 您可以使用此巢狀技術,建立一些部署小型資源的模組,然後將這些模組組成更大模組,以定義複雜資源拓撲。 範本會將這些片段合併成可部署的成品。

提示

雖然可以巢狀多層模組,但可能會變複雜。 如果您收到錯誤或發生其他錯誤,有許多巢狀層時,很難處理需要修正的內容。

對於複雜的部署,有時可使用部署管線來部署多個範本,而不是建立單一範本,使用巢狀方式執行所有作業。 您會在之後的 Microsoft Learn 課程模組中,深入了解部署管線。

選擇良好檔案名稱

務必為每個模組使用描述性檔案名稱。 檔案名稱實際上會成為模組的識別碼。 請務必讓同事只要看檔案名稱就能了解模組的用途。

在 Bicep 範本中使用模組

您將使用 module 關鍵字,在 Bicep 範本中使用模組,如下所示:

module appModule 'modules/app.bicep' = {
  name: 'myApp'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

模組定義包含下列元件:

  • module 關鍵字。
  • 符號名稱,例如 appModule。 每當您想要參考此模組時,此 Bicep 檔案中就會使用此名稱。 符號名稱永遠不會顯示在 Azure 中。
  • 模組路徑,例如 modules/app.bicep。 這通常是本機檔案系統上 Bicep 檔案的路徑。 在之後的 Microsoft Learn 課程模組中,您將了解如何使用具有專屬模組路徑格式的登錄和範本規格,藉此共用模組。

    提示

    您也可以將 JSON Azure Resource Manager 範本 (ARM 範本) 當作模組。 如果您有一組尚未移轉至 Bicep 的範本,這項功能很實用。

  • name 屬性,指定部署的名稱。 您會在下一節中深入了解部署。
  • params 屬性,您可以在其中指定模組所預期參數的值。 您會在下一個單元中深入了解模組參數。

模組的運作方式

不一定要了解模組的運作方式才能使用,但可協助您調查部署的問題,或協助說明非預期的行為。

部署

在 Azure 中,「部署」是代表部署作業的特殊資源。 部署是資源類型為 Microsoft.Resources/deployments 的 Azure 資源。 提交 Bicep 部署時,您會建立或更新部署資源。 同樣地,在 Azure 入口網站中建立資源時,入口網站會代表您建立部署資源。

不過,並非所有對 Azure 資源的變更都會建立或使用部署。 例如,透過 Azure 入口網站修改現有資源時,通常不會建立部署來進行變更。 使用 Terraform 等協力廠商工具部署或設定資源時,它們可能不會建立部署。

使用 Azure CLI 或 Azure PowerShell 部署 Bicep 檔案時,可以選擇性指定部署的名稱。 如果未指定名稱,Azure CLI 或 Azure PowerShell 會自動以範本的檔案名稱,為您建立部署名稱。 例如,如果您部署名為 main.bicep 的檔案,則預設部署名稱為 main

使用模組時,Bicep 會為每個模組建立個別部署。 您為模組指定的 name 屬性,會成為部署的名稱。 您部署內含模組的 Bicep 檔案時,會建立多個部署資源:一個用於上層範本,一個用於每個模組。

例如,假設您建立名為 main.bicep 的 Bicep 檔案。 這會定義名為 myApp 的模組。 部署 main.bicep 檔案時,會建立兩個部署。 第一個名為 main,它會建立另一個名為 myApp 的部署,其中包含您的應用程式資源。

Diagram that shows two Bicep files, each of which has a separate deployment name.

您可以列出和檢視部署資源的詳細資料,以監視 Bicep 部署的狀態,或檢視部署的歷程記錄。 不過,針對部署重複使用相同名稱時,Azure 會以相同名稱覆寫最後一個部署。 如果您需要維護部署歷程記錄,請確保您為每個部署使用專屬名稱。 您可以在名稱中加入部署的日期和時間,讓名稱不重複。

產生的 JSON ARM 範本

部署 Bicep 檔案時,Bicep 會將它轉換成 JSON ARM 範本。 此轉換也稱為「轉譯」。 範本使用的模組會內嵌到 JSON 檔案中。 無論您在範本中加入多少模組,系統只會建立一個 JSON 檔案。

在上一節討論的範例中,Bicep 會產生一個 JSON 檔案,即使原本有兩個 Bicep 檔案。

Diagram that shows two Bicep files, which are transpiled into a single JSON file.