logo头像

Edward.K Thinking

(學習DevOps系列 12) Azure Resource Manager在DevOps扮演的角色


之前提到現今在DevOps推行上,因為多了Cloud的技術,讓整個DevOps推行比早期簡單多,因此,以Azure做為例子,在Azure上很多的服務其實都已經在走向IaC的概念,其中,Azure Resource Manager在這之間就是扮演很重要角色。早期的Azure並沒有像現在可以這樣方便自動化,它也是不斷地迭代產生的產品。早期的Azure Basic portal(有人還記的話)又或者叫做Azure Service Management,其特點是採用API層級的方式管理雲端服務模組,由於是透過API層級去做管理或是設定服務的能做甚麼事情,這樣做法容易被受侷限。而Azure Resource Manager帶來的改進,則是我們可以用開發程式方去管理Azure服務或是資源,這樣做法就比以前彈性和方便許多。


Azure Resource Manager本身也是一種服務,我們可以在所屬的Azure資源中去創建所需要的服務。在早期Azure中創建服務時候,會發現每個服務創建與管理都是單向且獨立的,本身與其他服務並沒有相關連結或是依賴關係。因此,對於雲端大型的應用系統來說,管理上是很麻煩的,因為,不會一套應用系統只會有單一使用一種服務的。而透過Azure Resource Manager,可以把一套應用程式所需要的資源組成都在這裡面進行創建,像是我們要創建一個VM,自然而然就會就會自動建立跟VM有關的資源群組,像是網路服務、儲存體、公共IP位置和網路安全群組等這類資源。要使用Azure Resource Manager可以使用Azure PowerShell、Azure CLI、Azure Portal、REST *API和Visual Studio去創建。這幾種方式是可以互相搭配使用的,如下圖所示


因此,若是要透過Azure做為應用程式平台或是DevOps平台,建議可以使用Azure Resource Manager,其好處有

  • 可以將解決方案內的所有資源群組起來並進行部署,管理和監視,而不是單獨處理這些資源。
  • 可以在整個開發生命週期中重複部署解決方案,並確信資源部署能保持一致的狀態
  • 可以通過宣告式設定模板而不是腳本來管理基礎架構。
  • 可以定義資源之間的依賴關係,以便按正確的順序部署它們
  • 可以將訪問控制,應用於資源組中的所有服務
  • 可以在訂閱中的所有資源用標籤設定,以方便進行管理
  • 可以透過相同樣板的群組資訊去了解其使用的費用,進行管理

Resource Groups


Azure中的資源群組,是容納Azure服務的容器。在資源群組中可以包含所有資源或是僅僅包含邏輯應用的服務資源。簡單來說使用Resource Groups,主要在於方便管理你在Azure上的所有服務。


而在使用Resource Groups分類我們的服務時,有幾點需要注意地方

  • 群組中所有的服務資源最好能有共同的生命週期。其意思在於就是可以一起更新、刪除、佈署。如果有一個資源不屬於同類型的生命週期,最好能個分開至其他資源群組
  • 每個服務資源只能存在一個資源群組
  • 可以隨時增加服務或是資源群組
  • 可以將服務資源從一個資源群組移至另一個資源群組
  • 資源群組裡面可以包含在不同區域的服務資源
  • 資源群組可以透過權限管理,限制訪問服務的管理

Azure Resource Manager 樣板結構


Azure Resource Manager的樣板是透過Json和Key/Value方式組合而成,其中樣板大小限制在1MB內,且每個參數文件只能有64KB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
**{**

**"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",**

**"contentVersion": "",**

**"parameters": {**** ****},**

**"variables": {**** ****},**

**"resources": [**** ****],**

**"outputs": {**** ****}**

**}**

  • $schema: 描述範本的JSON檔案的存放位置
  • contentVersion: 範本的版本
  • parameters: 執行部署時候,提供可選擇的值給自定義資源部署時用。
  • resources: 在Azure服務中可獲得的管理項目。 像是虛擬機、儲存帳戶、Web應用程序,DB和虛擬網絡等等
  • outputs: 佈署後所反饋的值

最簡單發布這範本就是使用Azure Portal,當然也可以使用PowerShell指令去佈署,指令會是像這樣

1
2
3
4
5
6
7
New-AzureRmResourceGroup -Name ExampleResourceGroup -Location "West US"

New-AzureRmResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup -TemplateFile

c:\MyTemplates\example.json -TemplateParameterFile

c:\MyTemplates\example.params.json

如果,覺得用這些文字管理很麻煩,也可以使用Azure Resource Manager Template Visualizer Tool用視覺化方式作呈現ARM模板內的設定值,讓我們在使用ARM模板時候可以透過UI去管理。當然也可以在這工具編輯完畢後,下載其範本

使用Azure Resource Manager Template Visualizer Tool

  • 選擇</>,則可以編輯Json檔案,並立即呈現其資源關聯圖

因此,藉由ARM方式要在Azure建立相關環境就容易許多,當然,如果要做DevTest Lab的環境,也可以藉由這方式完成。換句話說,之前提到DevOps中的標準化,這就是其中一項例子

上一篇