Azure資源模板化部署,倫家不懶都不好意思了

来源:http://www.cnblogs.com/zangdalei/archive/2017/08/14/7358911.html
-Advertisement-
Play Games

Azure 全新推出的部署模式:Azure Resource Manager(ARM,Azure 資源管理器)。有了它,Azure 部署從此變得輕而易舉。 ...


如果老闆讓你在雲平臺上部署一套系統,你準備怎麼做?

嗯,估計得根據具體需求開通或創建一大堆東西:虛擬機、存儲、資料庫、虛擬網路……別急還沒完,接著還要對這些東西的規模、配置等各方面調整和優化。一系列環節折騰下來,時間精力都消耗殆盡……不是說上雲可以更省事,更快捷麽?

童鞋,這是因為你的操作姿勢不對!

你想啊,就跟 Office 軟體一樣,無論你要寫文檔還是做 PPT,如果能事先挑選一個模板,那麼必要的設計和排版都有了,只要把自己的內容填進去,美觀專業的文檔就這麼輕鬆搞定。

那麼雲部署呢?如果也有類似的模板,按需選擇,調整必要參數,原本可能需要兩三天才能搞定的系統,就這麼分分鐘搞定 so easy~

小編在這裡向你隆重介紹 Azure 全新推出的部署模式:Azure Resource Manager(ARM,Azure 資源管理器)。有了它,Azure 部署從此變得輕而易舉。

康威資深工程師,SDN 和大規模數據中心網路專家

負責基於 Azure 的雲計算方案架構咨詢與設計

 

通過本文內容介紹 ARM 的概念、模板的建立和使用方法

 

最近 Azure 發佈了 ARM 模式(Azure Resource Manager),其中包含了對於 Resource Manager Template 的支持。什麼是 Resource Template?我們先來看一下 Azure 在 ARM 模式下的邏輯架構:

對於首次接觸公有雲的小伙伴,通常會習慣通過 Azure Portal 門戶來完成相關服務及資源的配置交付(如創建虛擬雲主機,虛擬網路,MySQL 資料庫服務等),我們可以把以上創建的服務及資源抽象為一套配置模板,用於描述所創建的服務及資源。由上圖可見,ASM 模式下用戶與 Azure 雲平臺交互界面的介面包括 Portal,CLI,Visual Studio 等,通過以上介面用戶給出的服務及資源的描述,Azure 平臺通過資源描述中間件(Resource Provider Contract)將客戶的描述轉譯為平臺資源描述並執行服務及資源創建。Azure Portal 通過互動式的 GUI 方式可以友好方便的幫助用戶上手,但是在批量及複雜服務及資源創建時就有些捉襟見肘。

那麼在批量及複雜服務及資源創建時有沒有好的解決辦法呢?Infrastructure As Code 基礎架構即代碼),腳本部署是可行的方案之一,類似所有自動化事務的執行,我們可以將複雜的服務及資源逐一創建並通過腳本實現自動化執行。但是本文在這裡不推薦大家使用上述方法,原因有二:

  1. 服務及資源的抽象不夠,我們在定義服務及資源的時候希望通過更高級的抽象給出簡單的介面,以便更便捷的定義複雜的服務及資源;

  2. 傳統的腳本語言的執行以串列順序方式執行,對於複雜的服務及資源定義如果希望實現並行及依賴關係定義是比較複雜的。

這裡給大家介紹的 Azure Resource Template 可以很好的解決上述問題,幫助大家簡單快捷的實現複雜的服務及資源交付,它通過 JSON 語言高級抽象描述資源定義大大降低了用戶的複雜度,同時將並行任務的拆解交給 Azure 平臺資源描述中間件來實現高效,實現 Infrastructure as Code。為方便大家理解,本文後面的內容按照如下順序:

  • 工具方法介紹

  • 舉例快速開始

  • 總結及課題延展

 

工具方法介紹

工欲善其事必先利其器,得力順手的工具可以讓我們事半功倍。Infrastructure as Code,和其他編程語言一樣,一個好的 IDE 可以為我們保駕護航。微軟為 Azure Resource Template 提供了 Visual Studio + Azure SDK 的工具組合,使用戶可以在 VS 環境下實現開發。主要功能如下:

1、格式檢查。幫助用戶檢查 JSON 格式;

2、基礎模板。微軟已經將 Azure 服務及資源的標準模板定義好,方便客戶調用。另外 GitHub 上還有海量的模板示例作為參考示例,VS 已經跟 Github 做了打通,在創建新項目的時候可以直接引用 Github 的模板,並且模板可以直接通過 VS 調用 Powershell 進行執行;

3、自動補全及函數庫查詢。在 VS 中可以幫助用戶做索引、函數的補全。

VS 的安裝與設置這裡不做贅述,大家可以參閱這篇文章配置安裝。

中國區 Azure 的連接需要修改 VS 的配置文件,可以參考此鏈接

舉例快速開始

開始之前我們先來設定一個目標場景,在 Azure Portal 上目前我們無法創建多網卡的虛擬機,我們的目標就是通過 Template 部署來實現多網卡虛擬機的交付,同時為了實現模板的復用,希望用戶可以自定義操作系統類型,VM 的規格,以及網卡的數量。

首先我們進行基本模板框架搭建

到此我們已經將一個虛擬機創建的基本模板框架搭建完畢,後面我們都基於這個框架來進行修改來達成我們之前預設的目標,通過 Template 部署來實現多網卡虛擬機的交付,同時為了實現模板的復用,希望用戶可以自定義操作系統類型,VM 的規格,以及網卡的數量。下麵我們先給出最終的實現模板,然後展開介紹,後面的介紹主要側重一些特殊語法的說明,以便大家可以自行編排自己的模板。

對於操作系統類型的定義可通過定義參數完成,通過 allowed Values 的定義可在最終使用模板時實現在交互頁面進行參數選擇以避免手工輸入帶來的錯誤。同理操作系統版本,VM 規格以及網卡數量均可採用類似方法定義。

“LinuxPublisher”: {

“type”: “string”,

“allowedValues”:[ “Ubuntu”, “CentOS” ]

},

變數套用式引用,在 Resource 模板定義中會通過調用參數或變數的方式來實現模板的通用。在此用例中目標創建的虛擬機的操作系統由於有客戶變數來進行選定,所以在虛擬機資源描述部分裡面設計的操作系統的相關描述都需要隨之而變。因為 Ubuntu 和 CentOS 兩個選項對應選項背後,相應的操作系統發行商,操作系統版本等參數都要隨之改變,為了實現資源描述部分的通用性,避免反覆寫兩次資源描述來覆蓋不同操作系統場景,我們採用變數套用式引用。通過定義 linuxUbuntu 和 linuxCentOS 變數來分別描述不同操作系統下相關變數參數,同時定義 linuxtype 變數,其中 linuxtype 的值等於 linux+ 用戶輸入的 LinuxPublisher 參數選項,客戶選定 LinuPublisher 選項後 linuxtype 的最終值將等於 linuxUbuntu 或 linuxCentOS,在後面的虛擬機資源描述的操作系統部分只需要調用 linuxtype 變數對象及可實現對客戶選定操作系統的變數值抽取,以“publisher”: “[variables(‘linuxtype’).imagePublisher]”為例,通過對 linuxtype.imagePublisher 的抽取實現相應操作系統發佈商信息的提取,而且整個資源描述只需要編寫一次。

迴圈描述 copy 可以實現多資源創建,在此例子中客戶可以自定義創建網卡的數量並且每個網卡關聯不同的子網,所以無法預先通過靜態反覆定義的方式將虛擬網路子網資源描述寫死,通過 copy 描述配以客戶輸入的網卡數量 NicNumber 變數作為迴圈次數 count,實現動態創建多個資源的目標。

使用條件語句實現 if or not 邏輯,在上述例子中虛擬機在多網卡場景下只有主網卡綁定公網 IP,在網卡資源描述中,需要公網地址的描述和不需要公網地址的描述是不同的,所以這裡的做法是先靜態描述一塊帶公網地址的網卡資源(因為客戶至少創建 1 塊網卡),在將剩餘的網卡資源描述引入條件語句從而實現當客戶輸入大於 1 塊網卡時(“condition”: “[greater(variables(‘linuxtype’).NicNumber,1)]”),剩餘網卡都按照無公網地址方式進行創建。

動態依賴關係的定義,通常在資源描述中通過 dependsOn 來表示依賴關係,如虛擬機資源需要依賴存儲賬戶及網卡資源。但本例中網卡的數量是變數無法預知,所以在描述依賴關係的時候無法靜態將所依賴的資源 ID 全部放上。這裡採用調用 reference 函數實現隱性依賴關係的描述,在虛擬機資源的 dependsOn 描述中移除網卡的依賴描述,在虛擬機描述中的 networkProfile 部分中定義 id 時,通過 reference 函數抓取 ID,reference 函數會在模板執行過程中抓取 runtime 的 id 值進行返回,只有當相應資源創建完畢時 reference 才會有返回值,從而實現資源依賴關係的隱性描述。

“networkProfile”: {

“copy”: [

{

“name”: “networkInterfaces”,

“count”: “[variables(‘linuxtype’).NicNumber]”,

“input”: {

“id”: “[replace(reference(concat(variables(‘nicName’),copyIndex(‘networkInterfaces’))).ipConfigurations[0].id,’/ipConfigurations/ipconfig1′,”)]”,

“properties”: {

“primary”: “[less(copyIndex(‘networkInterfaces’),1)]”

至此通過本例中幾個基本目標給大家介紹了在模板中常用的一些高級功能,這些功能有助於大家描述定義複雜的服務和資源,實現 Infrastructure as Code 的目標。最後模板一切就緒可以來部署了,Azure 支持通過在 Portal,PowerShell,CLI 中部署模板,其中 Powershell 可以直接在 VS 環境中調用,各種部署方法大家可以參閱這裡

本文將介紹通過 Portal 的方式進行部署,以便幫助大家理解在模板中定義的參數 Parameter 部分。

總結及課題延展

通過上述例子大家對 Azure Resource Template 應該已經有了一定瞭解。大家可以著手開始自己的 Infrastructure as Code 的旅程,下麵這些資源應該會幫到大家。

  1. Azure Resource Template 使用指南,基本使用方法幫助快速上手

  2. Azure Resource Template 最佳實踐,介紹 Template 定義的一些常用方法提高效率

  3. Azure Resource Template 高級函數使用指南,介紹 Template 內置函數幫助實現複雜邏輯

  4. Azure Resource Template 服務及資源原始模板參考,不知道每種服務及資源額如何定義描述時可作為字典參考

  5. Azure Resource Template Github,你想做的內容別人可能已經做了七八成,彎道超車搞起

  6. Azure Resource Portal 查閱現有 Resource 的模板作為參考

最後我們再來談一談延伸的話題,不少用戶也許用過其他雲平臺的類似的模板工具,那麼在多雲場景下豈不是需要維護兩套語言邏輯,這裡簡單提一下 Terraform,它是一個跨平臺的模板語言工具,它可以適配如 AWS,Azure,Alicloud 等雲廠商提供的 template 介面,不僅如此,它還可以適配操作系統配置,應用配置等終端對象,其通過標準的模板描述語言抽象從而實現雲平臺無關以及更複雜的 Infrastructure as Code,有興趣的話可以自行科學上網查詢更多相關資料。

現在準備好手頭的工具開始自己的 Infrastructure as Code 之旅吧。 

=

在這種方式的幫助下,我們可以利用他人創建的模板快速搭建所需環境,當然也可以根據自己的具體需求創建模板,在自己公司範圍內使用。當然,還可以將自己的模板分享出來,幫助更多人受益。

你要不要試試看吶!

推薦閱讀

天王蓋地虎寶塔鎮河妖,再給三篇 ARM 的相關文章要不要?要!

《Azure Resource Manager 概述》

《ARM 與經典部署模式的差異》

《創建自己的第一個 ARM 模板》

 

對了,瞧小編這記性,差點就忘了一件大事被老闆扣工資了,下麵是大事。

大事:【Azure文檔】菜單上線咯!

小伙伴們可以通過雲科技公眾號主頁底部菜單【瞭解雲】中的【Azure文檔】菜單,一鍵獲取你想得到想不到的 Azure 技術文檔與示例等等無限量資源

好了,就說這麼多,更多的驚喜等你來發現!

立即訪問http://market.azure.cn

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...