DevOps - IaC 基礎架構即代碼(二)Terraform及GitHub部署實例

我們已經(jīng)了解IaC是在一個或多個文件中管理基礎結構的過程化焕,而不是在用戶界面中手動配置資源的過程,介紹了Azure特定的IaC工具Azure Resource Manager嚼沿,這一篇我們將介紹Terraform。

Terraform

作為最主流的IaC工具之一,Terraform可以管理眾多云服務提供商(如Azure骤菠,Google Cloud,AWS)的資源疤孕,以及定制的內部解決方案商乎。官網(wǎng)上列舉了幾個典型使用Terraform的應用場景,如

  • 部署應用程序到Heroku平臺
  • 構建和管理N-Tier多層架構
  • “自服務”架構
  • 動態(tài)調度請求資源
  • 多云部署等

我們可以通過配置文件定義需要的組件祭阀,Terraform會生成執(zhí)行計劃鹉戚,列出達到預期狀態(tài)所需執(zhí)行的操作,然后執(zhí)行該計劃以構建所需的基礎結構专控。如果需要對配置進行更改抹凳,Terraform能夠確定更改的內容并創(chuàng)建可以應用的增量執(zhí)行計劃。

工具比較

Terraform的主要優(yōu)勢之一是多云部署和其語言統(tǒng)一性伦腐,使用HCL配置語言將Azure赢底,AWS,GCE柏蘑,OpenStack和本地部署一起使用幸冻。不同于ARM使用Json,聲明性代碼可以編寫復雜但易于閱讀的代碼咳焚。
還有其他一些優(yōu)勢洽损,如在Terraform中,可以隨時使用Terraform Destroy功能啟動和禁用資源黔攒,Terraform Plan驗證當前狀態(tài)趁啸,以確保它適合進行中的部署操作强缘。
此外部署后,Terraform將創(chuàng)建一個狀態(tài)文件terraform.tfstate不傅,用于將基礎結構的狀態(tài)與基礎結構本身分開存儲旅掂。狀態(tài)文件將許多部署數(shù)據(jù)以純文本形式寫入,包括變量访娶,資源信息商虐,帳戶等。如果這些元素是機密的崖疤,則可能會出現(xiàn)問題秘车。


準備工作

  1. Download Terraform下載Terraform并解壓。

  2. win+r打開run窗口輸入sysdm.cpl劫哼,在高級-環(huán)境變量中加入Terraform路徑叮趴。

  3. 輸入terraform -version驗證Terraform是否安裝成功。

C:\Users\admin>terraform -version
Terraform v0.14.5
  1. 準備可用的Azure賬號和Azure CLI

使用Terraform部署Azure資源

Terraform依靠Providers與遠程系統(tǒng)進行交互权烧,其中包含Terraform可以管理的一組資源類型或數(shù)據(jù)源眯亦。這里我們使用Azure Provider進行Azure資源的部署。

  1. 新建Terraform配置文件main.tf般码,使用Azure Provider新建位于eastasiamyTFResourceGroup資源組妻率。其中resource <_type_>.<_name_>表示新建一個ID為azurerm_resource_group.rg的資源,這個名稱用于引用配置中創(chuàng)建的Terraform資源板祝,與Azure中資源組的名稱不同宫静。
# Configure the Azure provider
terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = ">= 2.26"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "myTFResourceGroup"
  location = "eastasia"
}

  1. 將配置文件所在文件夾在命令行中打開,首先進行身份驗證券时。
az login
  1. 初始化你的配置
terraform init

初始化成功后如下
Output
  1. 在創(chuàng)建架構之前孤里,terraform會檢查配置文件的執(zhí)行計劃
terraform plan

這個執(zhí)行計劃會指出為了達到指定的理想狀態(tài),terraform會做哪些操作
Output
  1. 接著進行部署橘洞,如果你已經(jīng)使用plan檢查過執(zhí)行計劃扭粱,可以加上-auto-approve
terraform apply -auto-approve
  1. 部署完成后,到Azure門戶中查看震檩,發(fā)現(xiàn)資源組已部署完成。
    部署完成
  2. 查看文件夾蜓堕,可以發(fā)現(xiàn)terraform.tfstate文件抛虏,包含了Terraform創(chuàng)建的資源的ID和屬性,以便管理或銷毀這些資源套才。狀態(tài)文件包含配置中的所有數(shù)據(jù)迂猴,還可能包含明文形式的敏感值,因此請勿共享或簽入源代碼背伴。

在GitHub中使用Terraform進行自動化部署

  1. 新建文件夾terraform沸毁,放入main.tf配置文件
provider "azurerm" {
  version = "2.37"
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "myTFResourceGroup"
  location = "eastasia"
}
  1. 新建Workflow峰髓,環(huán)境變量中需要更新service principal的訪問密鑰,并指定Terraform運行的文件夾息尺,即配置文件所處位置携兵。Pull Request會觸發(fā)到Plan,當push到master時運行Apply搂誉。
name: 'Terraform'

on:
  push:
    branches:
    - master
  pull_request:

jobs:
  terraform:
    name: 'Terraform'
    runs-on: ubuntu-latest
    env:
      ARM_CLIENT_ID: ${{secrets.CLIENTID}}
      ARM_CLIENT_SECRET: ${{secrets.CLIENTSECRET}}
      ARM_SUBSCRIPTION_ID: ${{secrets.SUBSCRIPTIONID}}
      ARM_TENANT_ID: ${{secrets.TENANTID}}

    defaults:
      run:
        shell: bash

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Set Terraform
      uses: hashicorp/setup-terraform@v1
   
    - name: Terraform fmt
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.12.13
        tf_actions_subcommand: 'fmt'
        tf_actions_working_dir: 'terraform'
        tf_actions_comment: true

    - name: Terraform Init
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.12.13
        tf_actions_subcommand: 'init'
        tf_actions_working_dir: 'terraform'
        tf_actions_comment: true

    - name: Terraform Plan
      if: github.event_name == 'pull_request'
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.12.13
        tf_actions_subcommand: 'plan'
        tf_actions_working_dir: 'terraform'
        tf_actions_comment: true

    - name: Terraform Apply
      if: github.ref == 'refs/heads/master' && github.event_name == 'push'
      uses: hashicorp/terraform-github-actions@master
      with:
        tf_actions_version: 0.12.13
        tf_actions_subcommand: 'apply'
        tf_actions_working_dir: 'terraform'
        tf_actions_comment: true

  1. 查看運行過程徐紧。


    Workflow - Plan
  2. 若為push到master branch,則跳過plan階段炭懊。


    Workflow - Apply
  1. 查看資源組是否創(chuàng)建成功并级。


    Succeeded
相關閱讀

Introduction - Terraform by HashiCorp
Get Started - Azure | Terraform - HashiCorp Learn
Terraform - GitHub Actions

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市侮腹,隨后出現(xiàn)的幾起案子嘲碧,更是在濱河造成了極大的恐慌,老刑警劉巖父阻,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愈涩,死亡現(xiàn)場離奇詭異,居然都是意外死亡至非,警方通過查閱死者的電腦和手機钠署,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荒椭,“玉大人谐鼎,你說我怎么就攤上這事∪せ荩” “怎么了狸棍?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長味悄。 經(jīng)常有香客問我草戈,道長,這世上最難降的妖魔是什么侍瑟? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任唐片,我火速辦了婚禮,結果婚禮上涨颜,老公的妹妹穿的比我還像新娘费韭。我一直安慰自己,他們只是感情好庭瑰,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布星持。 她就那樣靜靜地躺著,像睡著了一般弹灭。 火紅的嫁衣襯著肌膚如雪督暂。 梳的紋絲不亂的頭發(fā)上揪垄,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音逻翁,去河邊找鬼饥努。 笑死,一個胖子當著我的面吹牛卢未,可吹牛的內容都是我干的肪凛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辽社,長吁一口氣:“原來是場噩夢啊……” “哼伟墙!你這毒婦竟也來了?” 一聲冷哼從身側響起滴铅,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤戳葵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汉匙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拱烁,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年噩翠,在試婚紗的時候發(fā)現(xiàn)自己被綠了戏自。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伤锚,死狀恐怖擅笔,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情屯援,我是刑警寧澤猛们,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站狞洋,受9級特大地震影響弯淘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜吉懊,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一庐橙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧借嗽,春花似錦怕午、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堡距。三九已至甲锡,卻和暖如春兆蕉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缤沦。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工虎韵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缸废。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓包蓝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親企量。 傳聞我的和親對象是個殘疾皇子测萎,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內容