使用 Azure Resource Manager 範本部署 Azure Logic Apps 工作流程
如果您已經使用 Azure 一段時間,可能聽說過 Azure Resource Manager。 讓我們來複習一下 Resource Manager 角色,並定義組成 Resource Manager 範本的要素。
什麼是 Azure Resource Manager?
Azure Resource Manager 是管理和組織雲端資源的介面。 請將 Resource Manager 視為部署雲端資源的一種方式。
如果您已經熟悉 Azure 資源群組,您就知道它們可讓您將相關的資源集合視為單一單位。 Resource Manager 負責組織可讓您透過單一動作,就能夠部署、管理及刪除所有資源的資源群組。
想想看您為分析人員執行的財務模型。 若要執行模型,您可能需要一個或多個虛擬機器 (VM) (儲存資料的資料庫),以及一個虛擬網路 (在所有項目之間啟用連線)。 使用 Resource Manager 時,您可以將這些資產部署至相同的資源群組,一起管理和監視這些資產。 完成時,您可以透過一個作業,刪除資源群組中的所有資源。
什麼是 Resource Manager 範本?
Resource Manager 範本會精確地定義部署中的所有 Resource Manager 資源。 您可以透過單一作業,將 Resource Manager 範本部署到資源群組中。
Resource Manager 範本為 JSON 檔案,使該範本成為「宣告式自動化」的一種形式。 宣告式自動化意指您可以定義您需要什麼資源,但無法定義如何建立這些資源。 換句話說,您定義您需要的內容,但 Resource Manager 必須確保正確地部署資源。
您可以將宣告式自動化想成類似於網頁瀏覽器顯示 HTML 檔案的方式。 HTML 檔會描述什麼元素會出現在頁面上,但不會描述如何顯示這些元素。 「如何」是網頁瀏覽器的責任。
注意
您可能聽過有人將 Resource Manager 範本稱為 ARM 範本。 我們慣用完整名稱 Azure Resource Manager 範本 或 Resource Manager 範本。
為什麼要使用 Resource Manager 範本?
使用 Resource Manager 範本讓您的部署更快且可重複性更高。 例如,您不再需要在入口網站中建立 VM,等待 VM 完成,然後建立下一個 VM,並依此類推。 Resource Manager 會為您負責整個部署。
以下是應考量的其他優點:
範本可提升一致性。
Resource Manager 範本可提供常用的語言,供您和其他人描述部署之用。 無論是使用工具還是 SDK 部署範本,範本內的結構、格式和運算式都保持不變。
範本有助於表達複雜的部署。
範本可讓您以正確的順序,部署多個資源。 例如,您應該先建立 OS 磁碟或網路介面,再部署虛擬機器。 Resource Manager 會對應每個資源及其相依的資源,然後先建立相依的資源。 相依性對應有助於確保以正確的順序執行部署。
範本可減少手動、容易出錯的工作。
手動建立和連線資源可能會很費時,而且過程中很容易犯錯。 Resource Manager 可確保每次都以相同的方式進行部署。
範本是程式碼。
範本可透過程式碼表達您的需求。 請將範本視為一種您可以共用、測試及設定版本的基礎結構即程式碼,如同其他任何軟體。 此外,由於範本是程式碼,因此您可以建立您能夠遵循的「書面記錄」。 範本程式碼會記載部署。 大部分的使用者都會使用某種版本控制維護其範本,例如 GIT。 當您變更範本時,其修訂歷程記錄也會記載範本 (以及您的部署) 如何隨著時間而變化。
範本可重複使用。
您的範本可以包含範本執行時要填入的參數。 參數可以定義使用者名稱或密碼、網域名稱等等。 範本參數可讓您建立多個版本的基礎結構 (例如預備和生產環境),但仍然使用相同的範本。
範本是可連結的。
您可以將 Resource Manager 範本連結在一起,使範本本身變成模組化。 您可以撰寫小型範本,每個範本都定義一個解決方案片段,結合起來就可以建立完整的系統。
財務分析人員所執行的模型是獨一無二的,但您可以在基礎結構中看到模式。 例如,大部分的模型都需要有資料庫來儲存資料。 許多模型會使用相同的程式設計語言、架構及作業系統執行細節。 您可以定義描述每個個別元件的範本,例如計算、儲存體與網路功能。 然後,您可以合併元件以符合每個分析師的特定需求。
Resource Manager 範本的內容
注意
此處,您將會看到一些程式碼範例,可讓您了解每個區段的結構。 若您看到不熟悉的內容,別擔心。 您可以檢閱其他人的範本,並在獲得更多實作體驗時撰寫自己的範本。
您之前可能已使用過 JavaScript 物件標記法 (JSON),在伺服器與 Web 應用程式之間傳送資料。 JSON 也是一個描述應用程式和基礎結構設定方式常用的方式。
JSON 可讓我們以文字表達儲存為物件的資料,例如虛擬機器。 「JSON 文件」基本上是索引鍵/值組的集合。 每個索引鍵都是字串。 每個索引鍵值可以是字串、數字、布林運算式、值的清單,或是物件,也就是其他索引鍵值組的集合。
Resource Manager 範本可能包含下列區段:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
雖然這些區段使用 JSON 來表示,但其與實際的 JSON 語言無關。 讓我們更詳細地檢視每個區段。
參數
您要在此區段指定範本執行時可設定哪些值。 例如,您可能會允許範本使用者指定使用者名稱、密碼或網域名稱。
以下是說明兩個參數的範例: 一個用於 VM 的使用者名稱,另一個用於其密碼。
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Password for the Virtual Machine."
}
}
}
變數
您要在此區段定義整個範本中使用的值。 變數有助於讓您的範本更容易維護。 例如,您可以先將儲存體帳戶名稱定義為一個變數,然後在整個範本中使用該變數。 如果儲存體帳戶名稱變更,您只需要更新變數。
以下是說明描述 VM 網路功能的幾個變數的範例。
"variables": {
"nicName": "myVMNic",
"addressPrefix": "10.0.0.0/16",
"subnetName": "Subnet",
"subnetPrefix": "10.0.0.0/24",
"publicIPAddressName": "myPublicIP",
"virtualNetworkName": "MyVNET"
}
函式
您要在此區段定義您不想要在整個範本重複的程序。 函式和變數一樣,有助於讓您的範本更容易維護。 以下範例可以建立一個函式,此函式會建立一個能夠在建立具有全域唯一命名需求的資源時使用的唯一名稱。
"functions": [
{
"namespace": "contoso",
"members": {
"uniqueName": {
"parameters": [
{
"name": "namePrefix",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
}
}
}
}
],
資源
您要在此區段定義組成您部署的 Azure 資源。
以下是建立公用 IP 位址資源的範例。
{
"type": "Microsoft.Network/publicIPAddresses",
"name": "[variables('publicIPAddressName')]",
"location": "[parameters('location')]",
"apiVersion": "2018-08-01",
"properties": {
"publicIPAllocationMethod": "Dynamic",
"dnsSettings": {
"domainNameLabel": "[parameters('dnsLabelPrefix')]"
}
}
}
這裡的資源類型為 Microsoft.Network/publicIPAddresses
。 其名稱是從變數區段讀取,而其位置 (或 Azure 區域) 則是從參數區段讀取。
資源類型可以隨著時間變更,因此 apiVersion
指的是您想要使用之資源類型的版本。 您可以隨著資源類型的演化和變更,修改您的範本,以便在您準備就緒時,使用最新的功能。
輸出
此區段是定義您希望在範本執行時所收到任何資訊的位置。 例如,您可能想要收到 VM IP 位址或 FQDN,這是您在部署執行之前並不知道的資訊。
下列範例顯示名為 hostname
的輸出。 FQDN 值是從 VM 的公用 IP 位址設定讀取的。
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
}
}
如何在範本中部署 Azure Logic Apps 工作流程?
Azure Logic Apps 工作流程是 Azure 中的資源。 因此,我們可以透過將之新增至資源清單,以部署在 Resource Manager 範本的 resources
區段中,以將之部署在範本中。 我們究竟要在 resources 區段中新增什麼內容,才能定義工作流程? 我們要將上述工作流程的 JSON 工作流程定義新增至 resources 區段中。 事實上,下列 JSON 程式碼片段會顯示一個 Resource Manager 範本,以部署我們在上一個單元中所述的基本工作流程。 您可以從醒目提示中看到,資源區段包含完整的工作流程定義。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Logic/workflows",
"apiVersion": "2017-07-01",
"name": "HelloLogicAppsTemplate",
"location": "westus2",
"properties": {
"state": "Enabled",
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"triggers": {
"manual": {
"type": "Request",
"kind": "Http",
"inputs": {
"method": "GET",
"schema": {}
}
}
},
"actions": {
"Response": {
"runAfter": {},
"type": "Response",
"kind": "Http",
"inputs": {
"body": "Hello Logic Apps Template!",
"statusCode": 200
}
}
},
"outputs": {}
},
"parameters": {}
}
}
],
"outputs": {
"logicAppUrl": {
"type": "string",
"value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', 'HelloLogicAppsTemplate'), '/triggers/manual'), '2017-07-01').value]"
}
}
}
我們可以使用下列其中一種方法來部署此範本:
- 使用 Azure 入口網站部署。
- 使用 PowerShell
Az
模組部署。 - 從 Azure 命令列介面 (CLI) 部署。
在本課程模組中,我們將會使用 Azure CLI 和 az deployment group
命令部署範本。
如何撰寫 Resource Manager 範本?
撰寫 Resource Manager 範本有許多種方法。 雖然您可以從頭開始撰寫範本,但是通常會從現有的範本開始,然後再加以修改以符合您的需求。
以下是您可以取得入門範本的幾個方式:
- 使用 Azure 入口網站,根據現有資源群組中的資源建立範本。
- 從您或您的小組針對類似用途所建置的範本著手。
- 開始使用 Azure 快速入門範本;您將在下一個單元中看到如何進行。
無論您使用哪一種方法,撰寫範本都將牽涉到使用文字編輯器。 您可以使用您最愛的編輯器,但 Visual Studio Code 的 Azure Resource Manager 工具擴充功能 是專為建立範本而設計。 此延伸模組可讓您更輕鬆地瀏覽您的範本程式碼,並為許多常見的工作提供自動完成功能。
當您探索及撰寫範本時,請檢閱文件,以了解可供使用的資源類型,以及其使用方式。
在下一個單元中,我們將會檢查現有的範本,並從 Azure CLI 加以部署。