Azure 基礎 : 使用 template 簡化部署

筆者在前文中介紹瞭如何使用 PowerShell 腳本在 Azure 上建立虛擬主機。正如你所看到的,整個建立過程仍是有點繁瑣的,由於咱們須要使用 PowerShell 腳本建立並關聯全部相關的組件。其實 Azure 爲運維人員提供了效率更高的操做方式:模板。咱們能夠經過聲明式的語法來建立模板,而後經過模板來簡化部署操做。
Azure 提供了強大的模板功能,不只支持用戶建立模板,還能夠從當前的配置中導出模板。本文暫不關注建立模板的細節,只是把前文腳本建立的資源中導出爲模板,並經過導出的模板建立新的資源。html

從現有的資源導出模板

MS 建議咱們儘可能把同一個項目中的資源放置在同一個 resource manager 中管理,因此前文中咱們在常見虛擬主機的同時建立了一個新的名爲 vmpool 的 resource manager:shell

全部建立的資源都屬於這個 resource manager。接下來咱們就把這個 resource manager 中的全部資源都導出到模板中。以下圖所示,先選擇 "Automation script",而後點 "Download" 就能夠了:編程

打開下載到的壓縮包,裏面的文件以下:json

Azure 默認支持經過 PowerShell, shell, ruby 和 C# 部署模板,並提供了相應的腳本文件。也就是說咱們只須要執行下載到的 PowerShell 腳本就能夠部署一個和 vmpool 如出一轍的 resource group 了!ruby

接下來咱們使用 powershell 腳本進行演示,簡單起見咱們只保留 deploy.ps1 和 template.json, 其它文件都刪除掉。運維

修改模板中默認的名稱

若是咱們使用同一個訂閱號進行部署,須要修改一下模板文件中 stroage account 的名稱,否則的話會和已經存在的資源名稱發生衝突。這裏咱們在 template.json 文件中默認的 stroage account 名稱前面添加 "check" 字樣:編程語言

依賴問題

筆者在測試的過程當中碰到了一個很奇怪的依賴錯誤:測試

提示出現了循環引用,按照提示找到 template.json 文件中對應的行。查看以後感受模板文件應該是正確的,按理說不該該有這樣的錯誤提示。可是嘗試了好幾回都是相同的錯誤,索性刪除提示出錯的行:spa

把紅框中的行刪除,不要忘記刪除前面的一個逗號。而後重試,錯誤消失。按理說新建的 networkinterfaces 和虛機有依賴關係是沒有問題的,可是卻出問題了,估計是個 bug。命令行

執行命令進行部署

在執行 PowerShell 腳本進行部署前,咱們還須要肯定幾個參數。首先是你的訂閱號的 ID,這個參數決定你的資源被部署在哪一個訂閱號的下面。還有就是新的 resource group 的名稱和位置。最後須要給本次的部署起個名字:

-subscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
-resourceGroupName "checkRG"
-resourceGroupLocation "Korea Central"
-deploymentName "testdeployment"

若是不在命令行中指定這些參數就須要在執行過程當中和用戶交互。咱們但願作到自動化的部署過程,因此應該事先準備好這些參數,從而避免執行過程當中的交互操做。所以最後咱們要執行的部署命令爲:

./deploy.ps1 -subscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" `
-resourceGroupName "checkRG" `
-resourceGroupLocation "Korea Central" `
-deploymentName "testdeployment"

執行上面的命令,咱們會獲得一個名爲 checkRG 的 resource group,其內容和母版 vmpool 幾乎是同樣的(storage account 的名稱不同):

訪問權限問題

在 azure 上執行操做須要用戶先進行登陸,那麼在 PowerShell 腳本中該如何作呢(須要避免執行腳本的過程當中與用戶交互)?
筆者在《Azure 基礎:用 PowerShell 自動登陸》一文中有詳細的介紹,有興趣的朋友能夠參考。

總結

本文經過一個簡單的 demo 演示瞭如何經過 PowerShell 和模板在 azure 上部署資源。與單純的使用 PowerShell 腳原本建立全部的資源相比,使用模板能夠簡化整個部署的過程。而且模板使用的是 json 格式,與具體的編程語言無關。你可使用任何 Azure 支持的語言來部署模板中聲明的資源。

相關文章
相關標籤/搜索