Azure Terraform(七)利用Azure DevOps 實現自動化部署基礎資源(補充)
- 2021 年 1 月 28 日
- 筆記
- Azure, Azure DevOps, Terraform
一,引言
之前一篇文章有講解到利用 利用Azure DevOps 實現自動化部署基礎資源,當時 TF 代碼沒有針對 Azure 各個資源的封裝,所有的資源代碼全部寫在一個 main.tf 文件中。然後還有講到 Azure Resource Common Module 的 TF 代碼的封裝。之前還在Azure Terraform 第四節講到利用 Azure Storage 遠程狀態文件存儲。那麼今天我們嘗試將封裝過 Common Module 的 TF 代碼,結合 TF 狀態文件遠端存儲,實現自動化部署基礎資源
——————–Azure Terraform 系列——————–
1,Azure Terraform(一)入門簡介
2,Azure Terraform(二)語法詳解
3,Azure Terraform(三)部署 Web 應用程序
4,Azure Terraform(四)狀態文件存儲
5,Azure Terraform(五)利用Azure DevOps 實現自動化部署基礎資源
6,Azure Terraform(六)Common Module
7,Azure Terraform(七)利用Azure DevOps 實現自動化部署基礎資源(補充)
二,正文
1,Azure DevOps 創建項目
輸入項目名稱 「CnBateBlogWeb_Infrastructure_V2」,點擊 「Create」 創建項目。
2,配置Azure DevOps Release Pipeline 環境
2.1,添加 Release Pipeline
選擇 「 Pipelines=》Releases」,點擊 「New pipeline」 創建新的 pipeline
模板選擇 「Empty job」,並且點擊圖中箭頭所指的 「x」 關閉頁面
Stage 頁面,輸入新的 Stage name:「Deploy Infra」,並且關閉此頁面
2.2,添加 Artifacts
接下來需要添加 「artifact」,點擊圖中的 「+ Add an artiface」
選擇 」GitHub「 ,
Service 添加新的 connection:”github_connection_xxxxx”
Source(repository)選擇:TF 代碼庫
Default branch:「remote_stats」
Default version:」Latest from the default branch「
點擊 “Add” 添加 artifact。
2.3,添加 task
接下來添加 」Deploy Infra「 Stages 相關 task
2.3.1,創建遠程存儲相關 job
點擊圖中圈中的 」+「,添加 new task,並且在右邊的輸入框中輸入 」Azure CLI「,選中圖中的 」Azure CLI「
注意,之前在 一篇文章中講到遠端存儲時,需要提前創建 Azure Storage Accunt 和 Azure KeyVault。Azure Storage Account 的 Container 中用來存儲 TF 的狀態文件,Azure KeyVault 存儲 Azure Storage Account 的 access_key(訪問密鑰),之前是手動創建,主要是為了給大家演示。今天,我們通過 Azure CLI 創建快捷操作,並且 Azure CLI 這個 task 移至 Azure Releases Pipeline 中。
輸入相關參數:
Display name:」Azure CLI :Create Storage Account,Key Vault And Set KeyVault Secret「
Azure Resource Manager connection:選擇自己的訂閱 id
Script Type(腳本類型)選擇:」Shell「
Script Location(腳本位置)選擇:」Inline script「(內聯腳本)
Inline Script(腳本)在 Azure 中創建以下資源:
1)Storage 存儲帳戶
2)Blob存儲容器(將存儲狀態文件)
3)密鑰庫,將用於安全地存儲Storage 的訪問密鑰
Inline Script(內聯腳本)如下所示:
# create azure resource group
az group create --location eastasia --name $(terraform_rg)
# create azure storage account az storage account create --name $(storage_account) --resource-group $(terraform_rg) --location eastasia --sku Standard_LRS
# create storage account container for tf state az storage container create --name $(storage_account_container) --account-name $(storage_account)
# query storage key and set variable ACCOUNT_KEY=$(az storage account keys list --resource-group $(terraform_rg) --account-name $(storage_account) --query "[?keyName == 'key1'][value]" --output tsv)
# create azure keyvault az keyvault create --name $(keyvault) --resource-group $(terraform_rg) --location eastasia --enable-soft-delete false
# set keyvault secret,secret value is ACCOUNT_KEY az keyvault secret set --name $(keyvault_sc) --vault-name $(keyvault) --value $ACCOUNT_KEY
大家有注意到沒 」Inline Script「 中既有 Pipeline 設置的變量,又有自定義的系統變量
如果是獲取 pipeline 中設置變量:$(varivale_name)
如果是獲取自定義系統變量:$variable_name
2.3.2,添加 pipeline variables
接下來設置 pipeline 變量,選擇 」Variables「,點擊 」+Add「,添加相應的參數設置
Name | Value |
keyvault | cnbate-terraform-kv6 |
keyvault_sc | terraform-stste-storage-key |
storage_account | cnbateterraformstorage |
storage_account_container | terraform-state |
terraform_rg | Web_Test_TF_RG |
2.3.3,添加 Azure KeyVault 獲取 Access Secret Job
輸入 」Azure Key Vault「,點擊 」Add「 添加 Azure Key Vault Job
輸入相關參數:
Display name:「Azure Key Vault:Get Storage Access Secret」
Azure subscription 選擇當前自己的訂閱
Key vault 選擇:「cnbate-terraform-kv6」
Secrets filter(機密過濾器):「terraform-stste-storage-key」,如果選擇默認 「*」,則下載選定密鑰庫的所有機密
2.3.4,添加 Terraform install Job
搜索 「Terraform」,選擇 「Terraform tool install」
修改相應參數:
Display name:”Install Terraform 0.14.3″
Version(版本):」0.14.3「
2.3.5,添加 Terraform 初始化 Job
搜索 「Terraform」,點擊 「Add」
修改相應參數:
Display name:「Terraform:Init」
Configuration directory:選擇到 」~/src/model「 這個目錄下,也就是 terraform 代碼的工作目錄
Command 選擇:「init」
Addition command arguments:」-backend-config=”access_key=$(terraform-stste-storage-key)”「 (tf 代碼中沒有access_key 的配置信息,所以我們需要在 terraform init 過程中傳遞此參數)
AzureRM backend configuration:
Azure subscription:選擇當前自己的訂閱
Resource group:」Web_Test_TF_RG「
Storage account:」cnbateterraformstorage「
Container:」terraform-state「
Key:」cnbate.terraform.stats「
2.3.6,添加 Terraform 生成部署計劃 Job
搜索 」Terraform「,點擊 」Add「
修改相關參數:
Display name:」Terraform:plan「
Command 選擇:」plan「
Configuration directory: 選擇 terraform 代碼的工作目錄
Azure subscription 選擇當前自己的Azure訂閱
2.3.7,添加 Terraform 執行部署計劃 Job
搜索 」Terraform「,點擊 」Add「
修改相應參數:
Display name:」Terraform:auto-apply「
Command:」validate and apply「
Configuration directory:選擇 terraform 代碼的工作目錄
Additional command arguments:「-auto-approve」
Azure subscription:選擇當前自己訂閱
2.3.8,保存 Azure Pipeline 設置,並且設置 Pipeline 的觸發條件
修改當前 pipeline 名稱,並且點擊 「Save」 進行保存
設置 pipeline 的觸發條件
開啟持續部署觸發,每次在所選存儲庫中發生Git推送時觸發pipeline,接下來添加分支篩選條件
Type:Include,Branch:「remote_stats」,也就是說每當 「remote_stats」 發生git 推送的時候,觸發此 pipeline
設置完畢後,點擊 「Save」 進行保存
3,測試Azure DevOps 自動化部署基礎設施資源
先登錄 Azure Portal 確保 「Web_Test_TF_RG」 資源組中不存在任何資源
手動觸發 Azure Release Pipeline
點擊 「Create release」 進行手動觸發
稍等片刻,等待pipeline 執行完畢
查看 「Web_Test_TF_RG」 中的所有資源
Bingo,大功告成!!!!
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
三,結尾
今天的實戰操作比較多,全都是需要在Azure DevOps 上進行操作的,大家要多加練習,熟能生巧。本文所分享的內容也存在着很多我自己的一些理解,有理解不到位的,還希望多多包涵,並且指出不足之處。
參考資料:Terraform 官方,azurerm 文檔,Azure CLI 文檔
Terraform_Cnbate_Traffic_Manager github://github.com/yunqian44/Terraform_Cnbate_Traffic_Manager
作者:Allen
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。