什麼是 ARM 範本?

在移至雲端後,許多小組都採用了敏捷式的開發方法。 這些小組能夠快速完成反覆項目。 他們必須反覆將解決方案部署至雲端,並了解自身的基礎結構處於可靠狀態。 隨著基礎結構成為反覆程序的一部分,作業與開發之間的界線早已消失。 小組需要透過統一的程序來管理基礎結構和應用程式的程式碼。

為了克服這些挑戰,您可以將部署自動化並使用基礎結構即程式碼的做法。 在程式碼中,您可以定義需要部署的基礎結構。 基礎結構程式碼會成為專案的一部分。 就和應用程式的程式碼一樣,您也會將基礎結構的程式碼儲存在來源存放庫中,並為其設定版本。 您小組中的任何人都可以執行程式碼並部署類似的環境。

若要為 Azure 解決方案實作基礎結構即程式碼,請使用 Azure Resource Manager 範本 (ARM 範本)。 範本是一個 JavaScript 物件標記法 (JSON) 檔案,會定義專案的基礎結構和設定。 範本會使用宣告式語法,可讓您陳述您要部署的項目,而不需要撰寫一連串程式設計命令來加以建立。 在該範本中,您可以指定要部署的資源和這些資源的屬性。

提示

我們已推出名為 Bicep 的新語言,其會提供與 ARM 範本相同的功能,但是語法更易於使用。 在部署期間,每個 Bicep 檔案都會自動轉換為 ARM 範本。 如果您正在考慮基礎結構即程式碼選項,建議考慮 Bicep。 如需詳細資訊,請參閱什麼是 Bicep?

若要了解如何開始使用 ARM 範本,請觀看下列影片。

為何選擇使用 ARM 範本?

如果您正猶豫不決,不知道該使用 ARM 範本還是其他的基礎結構即程式碼服務之一,請考慮使用範本的下列好處:

  • 宣告式語法:ARM 範本可讓您以宣告方式建立和部署整個 Azure 基礎結構。 例如,您不僅可以部署虛擬機器,也可以部署網路基礎結構、儲存體系統,以及您可能需要的其他任何資源。

  • 可重複的結果:您可以在整個開發生命週期中重複部署您的解決方案,並能確信您的資源會以一致的方式部署。 範本具有等冪性,這表示您可以多次部署相同的範本,並取得相同狀態下的相同資源類型。 您可以開發一個代表所需狀態的範本,而無須開發多個不同的範本來代表更新。

  • 協調流程:您無須擔心複雜的作業順序。 Resource Manager 會協調相互依存資源的部署,使其以正確的順序建立。 Resource Manager 會盡可能以平行方式部署資源,讓您的部署比序列部署更快完成。 您可以透過單一命令來部署範本,而不是透過多個命令式命令來部署範本。

    範本部署比較

  • 模組化檔案:您可以將範本分成較小型且可重複使用的元件,並在部署時將其連結在一起。 您也可以將某個範本以巢狀方式放到另一個範本底下。

  • 建立任何 Azure 資源:您可以立即在範本中使用新的 Azure 服務和功能。 一旦資源提供者推出新的資源,您就可以透過範本部署這些資源。 使用新服務之前,您不需要等待工具或模組更新。

  • 擴充性:透過部署指令碼,您可以將 PowerShell 或 Bash 指令碼新增至您的範本。 部署指令碼會擴充您在部署期間設定資源的能力。 指令碼可以包含在範本中,也可以儲存在外部來源中,再於範本中參考。 部署指令碼可讓您在單一 ARM 範本中完成端對端環境設定。

  • 測試:您可以使用 ARM 範本工具組 (arm-ttk) 來測試範本,以確定範本有遵循建議的指導方針。 此測試工具組是 PowerShell 指令碼,可從 GitHub 下載。 此工具組可讓您更輕鬆地使用範本語言來發展專業知識。

  • 預覽變更:在部署範本之前,您可以使用假設狀況作業來取得變更的預覽。 透過假設狀況,您可以看到系統所要建立、更新或刪除的資源,以及將要變更的資源屬性。 假設狀況作業會檢查您環境的目前狀態,並排除管理狀態的需求。

  • 內建驗證:範本在通過驗證之後才會進行部署。 Resource Manager 會先檢查範本再開始部署,以確保部署能成功。 部署不太可能停在半完成狀態。

  • 已追蹤的部署:在 Azure 入口網站中,您可以檢閱部署歷程記錄,並取得範本部署的相關資訊。 您可以查看已部署的範本、已傳入的參數值,以及任何輸出值。 其他基礎結構即程式碼服務則不會透過入口網站進行追蹤。

    部署歷程記錄

  • 原則即程式碼Azure 原則是用來將治理自動化的原則即程式碼架構。 如果您使用 Azure 原則,則在透過範本部署時,會在不符合規範的資源上進行原則補救。

  • 部署藍圖:您可以利用 Microsoft 所提供的藍圖來符合法規和合規性標準。 這些藍圖包含適用於各種架構的預建範本。

  • CI/CD 整合:您可以將範本整合至持續整合和持續部署 (CI/CD) 工具,這可將您的發行管線自動化,以便快速且可靠地更新應用程式和基礎結構。 藉由使用 Azure DevOps 和 Resource Manager 範本工作,您可以使用 Azure Pipelines 來持續建置和部署 ARM 範本專案。 若要深入了解,請參閱具有管線的 VS 專案教學課程:Azure Resource Manager 範本與 Azure Pipelines 的持續整合

  • 可匯出的程式碼:您可以藉由匯出資源群組的目前狀態,或檢視特定部署所用的範本,來取得現有資源群組的範本。 檢視匯出的範本有助於了解範本語法。

  • 製作工具:您可以使用 Visual Studio Code 和範本工具擴充功能來撰寫範本。 您會獲得 Intellisense、語法醒目提示、內嵌說明,以及其他語言函式。 除了 Visual Studio Code 之外,您也可以使用 Visual Studio

範本檔案

在範本內,您可以撰寫範本運算式來擴充 JSON 的功能。 這些運算式會利用 Resource Manager 所提供的函式

範本會有以下區段:

  • 參數 - 可在部署期間提供值,讓同一個範本得以用於不同的環境。

  • 變數 - 可定義會在範本中重複使用的值。 您可以透過參數值來建構變數。

  • 使用者定義的函式 - 可建立自訂函式以簡化範本。

  • 資源 - 指定要部署的資源。

  • 輸出 - 從已部署的資源傳回值。

範本部署程序

在部署範本時,Resource Manager 會將範本轉換成 REST API 作業。 例如,當 Resource Manager 收到具有下列資源定義的範本︰

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-04-01",
    "name": "mystorageaccount",
    "location": "westus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2",
    "properties": {}
  }
]

它會將定義轉換成下列 REST API 作業,該作業會再傳送給 Microsoft.Storage 資源提供者︰

PUT
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2019-04-01
REQUEST BODY
{
  "location": "westus",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}

請注意,您在範本中為資源設定的 apiVersion 會作為 REST 作業的 API 版本。 您可以重複部署範本,並確信其能夠繼續運作。 藉由使用相同的 API 版本,您不必擔心可能會在較新版本中引進的重大變更。

若要部署範本,請使用下列任何選項:

範本設計

範本和資源群組的定義方式全由您決定,方案的管理方式也是如此。 比方說,您可以透過單一範本在單一資源群組中部署三層式應用程式。

三層式範本

但您不需要在單一的範本中定義整個基礎結構。 通常的合理作法是將您的部署需求分成一組有目標及特定目的的範本。 您可以輕鬆地將這些範本重複使用於不同的方案。   若要部署特定的方案,您會建立連結所有必要範本的主要範本。 下圖顯示如何透過包含三個巢狀範本的父範本部署三層式方案。

巢狀階層範本

如果您想像的階層有不同的生命週期,您可以將這三個階層部署到不同的資源群組。 請注意,資源仍可連結至其他資源群組中的資源。

階層範本

如需巢狀範本的相關資訊,請參閱透過 Azure Resource Manager 使用連結的範本

共用範本

在建立範本後,您可以與組織中的其他使用者共用該範本。 範本規格可讓您將範本儲存為資源類型。 您可以使用角色型存取控制來管理範本規格的存取權。具有範本規格讀取權限的使用者可以部署該範本,但不能進行變更。

這種方法表示您可以安全地共用符合組織標準的範本。

後續步驟