DevOps - IaC 基礎(chǔ)架構(gòu)即代碼(一)Azure Resource Manager及GitHub部署實例

Infrastructure-as-code直譯就是將基礎(chǔ)架構(gòu)作為代碼,是自動化部署重要的一環(huán)驾凶,具有易遷移牙甫,易伸縮,相對風(fēng)險低等優(yōu)勢调违。隨著生產(chǎn)和交付周期數(shù)量和頻率增加窟哺,IaC作為DevOps的最佳實踐之一,使構(gòu)建和配置基礎(chǔ)架構(gòu)更加高效技肩。

這一篇我們將介紹Azure Resource Manager且轨,并且以GitHub為例,如何在DevOps管道中使用ARM虚婿。


Azure Resource Manager

我們先來看一下Azure提供的IaC工具旋奢。Azure資源管理器(ARM)是為部署和管理Azure資源提供的服務(wù),是Azure特定的IaC工具然痊,允許對資源進行部署至朗,維護和追蹤。

ARM通過聲明性模板而非腳本來管理基礎(chǔ)結(jié)構(gòu)剧浸。Azure Resource Manager templates (ARM templates)是定義項目基礎(chǔ)結(jié)構(gòu)和配置的JSON文件锹引,包含六個頂級元素schema矗钟、contentVersionparameters吨艇、variablesresourcesoutput祸挪。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "",
  "apiProfile": "",
  "parameters": {  },
  "variables": {  },
  "functions": [  ],
  "resources": [  ],
  "outputs": {  }
}

我們可以使用 Visual Studio Code和模板工具擴展來創(chuàng)作模板增热;如果不熟悉 Azure 部署和 JSON 格式公黑,也可以通過在Azure門戶中導(dǎo)出來獲取現(xiàn)有資源組的模板。

創(chuàng)建資源前可以下載模板

有了模板以后涩金,我們可以通過Azure門戶/Azure CLI/Powershell進行模板的部署副渴。以下使用Azure CLI部署本地模板azuredeploy.json為例。若要部署外部模板,將template-file改為template-uri 參數(shù)即可一喘。此外根據(jù)部署范圍不同使用不同的命令,以下group為部署到資源組。還有更多參數(shù)以滿足不同部署需要,例如mode參數(shù),可以指定部署為增量更新還是完整更新评雌。

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file azuredeploy.json \
  --parameters storageAccountType=Standard_GRS

聲明性模板的好處在于你不必了解后面到底是怎么調(diào)用完成資源的配置耐薯,ARM對請求進行身份驗證和授權(quán)后,將模板轉(zhuǎn)換為 REST API 操作,會發(fā)送到相關(guān)資源提供程序,配置資源。


ARM處理Azure請求

使用ARM在GitHub中進行持續(xù)部署

基本了解ARM之后吓懈,我們來看一下如何在DevOps過程中加入ARM的使用耍攘,作為IaC的方式式曲,提升軟件開發(fā)的效率吝羞。以下以GitHub為例

  1. 首先將部署存儲賬號的ARM模板上傳到Repository符衔。
    ARM模板
  2. 我們需要通過Service Principal 來連接Azure與GitHub判族。這里的范圍為某一資源組。

az ad sp create-for-rbac --name {myApp} --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/{MyResourceGroup} --sdk-auth
  1. 創(chuàng)建成功后项戴,記錄clientId, clientSecret, subscriptionIdtenantId形帮,并在GitHub里新建Secret。

    新建Secret

  2. 以同樣的方式新建AZURE_RGAZURE_SUBSCRIPTION,分別放入Service Principal的范圍中辩撑,Azure資源組的名字和Azure的訂閱ID界斜,我們會在部署ARM模板時用到這些。

    Secrets

  1. 在GitHub的Action選項下合冀,新建workflow锄蹂。在右側(cè)的marketplace,可以搜索相關(guān)模塊水慨。首先我們需要添加Azure Login,使用我們剛剛在Secret中添加的AZURE_CREDENTIALS進行認(rèn)證敬扛。
    添加Azure Login
  1. 搜索并復(fù)制Deploy Azure Resource Manager (ARM) Template的內(nèi)容到.yml文件中晰洒,填入相關(guān)的變量值后commit。注意根據(jù)模板的schema啥箭,這里scope選擇resourcegroup谍珊。
    armdeploy
  1. yaml文件如下。
name: CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Azure Login
        uses: Azure/login@v1
        with:
          # Paste output of `az ad sp create-for-rbac` as value of secret variable: AZURE_CREDENTIALS
          creds: '${{ secrets.AZURE_CREDENTIALS }}'
          # Set?this?value?to?true?to?enable?Azure?PowerShell?Login?in?addition?to?Az?CLI?login
      
      - name: Deploy Azure Resource Manager (ARM) Template
        uses: Azure/arm-deploy@v1
        with:
          # Provide the scope of the deployment. Valid values are: 'resourcegroup', 'managementgroup', 'subscription'
          scope: 'resourcegroup'
          # Provide the Id of the subscription which should be used, only required for resource Group or Subscription deployments.
          subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
          # Provide the name of a resource group, only required for resource Group deployments.
          resourceGroupName: ${{ secrets.AZURE_RG }}
          # Specify the path or URL to the Azure Resource Manager template.
          template: ./azuredeploy.json
          # Incremental (only add resources to resource group) or Complete (remove extra resources from resource group) or Validate (only validates the template).
          deploymentMode: Incremental
          # Supply deployment parameter values.
          parameters: storageAccountType=Standard_LRS
  1. 回到action中查看情況急侥,可以看到我們的Jobs已運行成功砌滞。


    Workflow Jobs
  2. 到Azure門戶中,確認(rèn)已部署成功


    部署成功
相關(guān)閱讀

ARM 模板文檔 | Microsoft Docs
使用 GitHub Actions 部署資源管理器模板 | Azure Docs


下篇預(yù)告 - Terraform

ARM是針對Azure的IaC工具坏怪,Terraform作為最主流的IaC工具之一贝润,可以管理眾多云服務(wù)提供商(如Azure,Google Cloud铝宵,AWS)的資源打掘,以及定制的內(nèi)部解決方案。
我們可以通過配置文件定義需要的組件鹏秋,Terraform會生成執(zhí)行計劃尊蚁,列出達(dá)到預(yù)期狀態(tài)所需執(zhí)行的操作,然后執(zhí)行該計劃以構(gòu)建所需的基礎(chǔ)結(jié)構(gòu)侣夷。如果需要對配置進行更改横朋,Terraform能夠確定更改的內(nèi)容并創(chuàng)建可以應(yīng)用的增量執(zhí)行計劃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載百拓,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者琴锭。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耐版,隨后出現(xiàn)的幾起案子祠够,更是在濱河造成了極大的恐慌,老刑警劉巖粪牲,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件古瓤,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機落君,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門穿香,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绎速,你說我怎么就攤上這事皮获。” “怎么了纹冤?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵洒宝,是天一觀的道長。 經(jīng)常有香客問我萌京,道長雁歌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任知残,我火速辦了婚禮靠瞎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘求妹。我一直安慰自己乏盐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布制恍。 她就那樣靜靜地躺著暑始,像睡著了一般七婴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天切蟋,我揣著相機與錄音融柬,去河邊找鬼鸽素。 笑死隆判,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俯渤。 我是一名探鬼主播呆细,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼八匠!你這毒婦竟也來了絮爷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤梨树,失蹤者是張志新(化名)和其女友劉穎坑夯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抡四,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡柜蜈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年仗谆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淑履。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡隶垮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秘噪,到底是詐尸還是另有隱情狸吞,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布指煎,位于F島的核電站蹋偏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏至壤。R本人自食惡果不足惜暖侨,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崇渗。 院中可真熱鬧,春花似錦京郑、人聲如沸宅广。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跟狱。三九已至,卻和暖如春户魏,著一層夾襖步出監(jiān)牢的瞬間驶臊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工叼丑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留关翎,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓鸠信,卻偏偏與公主長得像纵寝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子星立,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容