Terraform 在英語流利說的實踐

2022-01-06 流利說技術團隊
為什麼要使用 Terraform ?在 Terraform 未出現之前,我們創建雲廠商的資源就是靠人工點,操作非常簡單,但實際應用中會有許多的問題:資源無法統一管理,沒有統一的倉庫去記錄這些資源的歸屬與規格變更等信息。非常容易出現變動帶來的混亂。手工變更誤操作影響線上服務正常運行,並難以回滾。人機互動過多,原來的便捷就變成了容易出錯,最可怕的就是「點錯了」,還忘了原來是什麼樣。創建重複資源時,需要重複人工頁面操作,耗時且無法標準化。

 

Terraform 的使用帶來的變化

Terraform 最直觀的功能就是 Infrastructure as Code,將雲上基礎設施以代碼的形式描述出來,那麼每一個基礎設施的詳細參數都是清楚、明確的,可以很快的通過複製代碼修改個別參數的方法創建出同類資源,標準且提效。

同時,Terraform 進行與雲廠商交互操作的時候是非常嚴謹,在你更改完代碼後,需要先用 terraform plan 進行變更預覽,你可以看到你的更改會影響到線上的部分,確定後進行 terraform apply,一次變更塵埃落定。

使用 Terraform 後需要注意的就是 code repo, 存儲線上基礎設施狀態的 backend,最重要的就是 plan 之後的 review。Terraform 使用的語言是Hashicorp 自己定義的 HCL 語言,是屬於一種使用不難但是入門需要費點功夫的語言,要求所有研發都會寫是不必要也不現實的。同一個 repo 裡面的東西,如果面向所有人,必將帶來混亂的目錄結構與定量定義,所以基礎設施的維護還是要放在基礎設施工程師這裡,然而專人負責寫 Terraform 也大可不必,於是我們就把它做成了一個流程化的東西。

 Terraform 在流利說的流程化


我們給研發提供的各種窗口連結都放在了一個叫做 Luban 的平臺上,申請人只需要在前端選擇必要的參數,提交申請,對於申請人來說需要做的事情就結束了,接下來就是等待審批結果。例如,我想要申請一個阿里雲 ECS 實例,如果直接寫 Terraform,那大概要寫一個如下的文件:
resource "alicloud_instance" "instance" {  availability_zone = "cn-beijing-b"  security_groups   = alicloud_security_group.group.*.id
instance_type = "ecs.n4.large" system_disk_category = "cloud_efficiency" system_disk_name = "test_foo_system_disk_name" system_disk_description = "test_foo_system_disk_description" image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd" instance_name = "test_foo" vswitch_id = alicloud_vswitch.vswitch.id internet_max_bandwidth_out = 10 data_disks { name = "disk2" size = 20 category = "cloud_efficiency" description = "disk2" encrypted = true kms_key_id = alicloud_kms_key.key.id }}

看起來好像很容易看懂但有的地方又有點疑惑,接著就要去查 alicloud provider documentation 各個參數的意思然後改參數,對於一個沒有寫過 Terraform 的人來說還是比較麻煩的。而做了一個前端申請頁面後,只需要選擇必定的參數,Luban 後端就會按既定的規則在相應目錄下進行代碼生成並觸發 GitOps 流程,對於申請人來說,只需要等審批結果了。

mobius 是 Luban 後端非常重要的一個引擎,它能夠集成 GitLab 的 webhook, 處理 merge request 的 create/update/merge/cancel 事件,能夠處理 Terraform 流程的 int/plan/apply, 並輸出日誌。git 提交後,mobius 會自動進行 terraform plan 的 Pipline。

TechLeader 通過前端的申請歷史,可以看到對應資源申請的詳細進展,查看 plan 結果是否符合預期,符合點擊 approve 進入下個流程,由基礎設施成員進行覆審。

值班人員在 GitLab 上審批 approve 後觸發mobius webhook 進行 terraform apply 即對線上做出變更,apply 成功後,mobius 自動進行代碼 merge, 至此一個申請流程結束,而申請人也會在內部Chat上收到 Luban Bot發出的資源申請成功的通知。如此,資源的申請就非常的嚴謹,也不需要人員專門去學習寫 Terraform, 重點就放在 review terraform plan 輸出的變化是不是符合預期,並且通過ChatBot的觸發性通知,提升了效率。Terraform 的導出如果之前未使用 Terraform ,是直接點出來的資源,然後現在想接入 Terraform 進行管理,不用擔心,HashiCorp 公司做的 Terraform 適用於各個雲廠商,當然會考慮到這種情況,對於已有的 resource,terrafrom import 可以解決這個問題,把線上的資源同步 到 backend 裡的 tfstate 中,同時可以查看到對應 tf 文件是什麼,如此,只要進行 import 操作,然後把相應的 tf code push 到 GitLab 的repo 裡,當看到 terraform plan 的結果是 「No changes」,那麼導出就結束了。但是對於大批量的導出來說,按官方方法一個個導出是一個非常費時費力的事情,在 GitHub 搜尋過後,果然發現了一個開源的項目 「Terraformer」,可以一次性導出所有資源,也可以按 filter 進行導出部分資源,但直接用對於我們理想的目錄結構與資源取名來說顯然是不適用的,如此,就需要在它的基礎上進行流利說導出適配。Terraformer 批量導出

原來的 Terraformer 會把資源的 tf 文件與應該存儲在雲上 backend 的 tfstate 全部導出到本地,所有資源按照資源類型劃分目錄,同種資源放在同一個 tf 文件裡,所有導出的資源名都是採用某個參數按他的命名規則 format取的,非常的長且不易讀,而按我們的 repo 管理,所有的資源是按 app 的目錄進行劃分,把 app 相關資源放在一起,無法按 app 劃分的底層網絡相關資源一起放在一個叫 shared 的目錄裡,並按資源類型進行更細節的目錄劃分,而資源的命名也很易讀,那麼需要做的事就很清楚了:

把相關資源按 app 導出到不同的目錄

更改導出資源的name, tf 與 tfstate 需要對應更改

把tfstate 上傳到雲上 backend 存儲(對象存儲 OSS)

把 tf 文件 push 到 GitLab 的 repo 裡

進行 terraform plan 看結果是不是 「No changes」

當寫完適配程序,進行批量導出,只需要填寫一張表,需要導出的資源類型,篩選資源的 filter,導出目錄,資源名(按 filter 生成或直接指定),然後轉化成一個 csv 文件,就可以一鍵進行導出了。

 

總結

優勢明顯

容易重現的系統。能夠毫不費力且可靠地重建基礎設施中的任何元素。

可任意處理系統。可以輕鬆創建、銷毀、替換、更改以及移動資源。

一致的系統。假設兩個基礎設施元素提供相似的服務,比如同一個集群中有兩個應用程式伺服器。這些伺服器應該幾乎完全相同。它們的系統軟體和配置應該是一樣的,除了一丁點配置(比如IP位址)用於區分彼此。

可重複的過程。基於可再生原則,對基礎設施執行的任何行為都是可以重複的。

變化的設計。確保系統能夠安全地改變。

 

依靠一個標準化的工作流,同時憑藉 Terraform 非常好的可 Review 變更的機制,同時使用一套前端工作流配合 GitLab 現有的 code review 行為,大大避免了基礎資源變更導致的異常且可追溯。解決了線上基礎資源雜亂無標準、無法複製行為的痛點。並結合一系列自動化轉化器和串聯工具的開發把現有的標準化直接輸出。做到了在未來多雲管理上的標準化、可複製、可追溯的工程化落地。為一鍵拉起一朵雲奠定了基礎。

作者簡介

楊海燕  技術部 cloud-infra 團隊 後端工程師

相關焦點

  • 凌雲案例 | 流利說的自動化提效實踐
    面對瞬息萬變的市場,流利說業務團隊希望快速響應市場的需求,打造更多有創意的產品。流利說的自動化實踐我們的自動化實現不是一蹴而就的,而是逐步構建的過程,這一過程中我們總結出來的原則是:1. 把日常重複性的工作進行自動化,讓大家切身體會到自動化帶來的價值,構建自動化的文化;2. 以價值導向對自動化的優先級進行排序,釋放自動化的業務價值。
  • Citrix ADC自動化部署之-terraform
    安裝terraform參考官網連結即可,本文環境為centos7安裝最新版Terraform[root@yyds ~]# more /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@yyds ~]# terraform -vTerraform
  • 五分鐘入門阿里雲Terraform OSS Backend
    Backend 通過關鍵字 backend 來聲明:terraform { backend "oss" { profile = "terraform" bucket = "terraform-oss-backend-1024" key = "prod/terraform.tfstate
  • IaC 自動化配置與編排神器 - Terraform 深度解析
    執行 terraform -v 可以看到類似下面的輸出:$ terraform -vTerraform v0.11.1安裝 terraform-provider-qingcloudterraform-provider-qingcloud 同樣是以二進位文件進行發布
  • 英語流利說
    英語流利說是一個正在高速成長的創業團隊我們的願景是「Help everyone become a global citizen
  • Terraform之申請AWS的EC2
    啥都不說先上代碼目錄結構├── cloud_init.sh  # 開機執行腳本 ├── instance.tf    # 申請資源的主機├── main.tf        # 主配置文件├── output.tf      # 輸出變量├── start.sh       # terraform
  • 開言英語VS 英語流利說
    (圖片來自朋友圈一友,和內容沒實質關係,只是我喜歡這張圖)今日用了一款app,叫英語流利說,先說說這款應用的感言,再補充說和開言英語的比較
  • Terraform中使用prevent_destroy搭配override文件防止誤刪資源
    讓我們執行以下命令來創建資源:$ terraform apply -var 'az=cn-bj2-03' -auto-approveucloud_instance.nosql: Creating...接下來我們再次執行apply,只不過這一次我們修改一下az的值:$ terraform apply -var 'az=cn-bj2-04' -auto-approveucloud_instance.nosql: Refreshing state...
  • 英語流利說不「燒錢」怎麼搞定用戶?
    也許那時,「英語流利說」的種子就已經暗暗在王翌的心裡埋下了。2012年英語流利說成立,正如創始人本身的技術「基因」緣由,英語流利說選擇了「AI+教育」的商業模式。 如今,行業競爭加盈利壓力,英語流利說當下面臨的困難並不小。
  • 兒英語流利說一年多少錢?實測上課體驗
    有家長向我推薦的少兒英語流利說這所機構,接下來就和大家講一講少兒英語流利說一年多少錢?實測app上課體驗!  1.少兒英語流利說的基本情況  大家在選擇英語培訓機構的時候,千萬不要盲目報名,畢竟現在好的英語培訓機構還是比較多的,家長們可以慢慢選擇。
  • 前沿 AI技術+大數據,英語流利說推出自適應移動英語課堂
    (點文末「閱讀原文」可查看「第一教育」此前對英語流利說聯合創始人兼CEO王翌的專訪)2016年7月6日,英語流利說推出的第一款商業產品——「懂你英語」新品發布會在上海舉辦。英語流利說聯合創始人兼CEO王翌介紹說,由英語流利說團隊歷時兩年、斥資數千萬打造的「懂你英語」,是全球首個基於智能AI技術的自適應移動英語課堂。
  • 手機App「英語流利說」的遊戲闖關之歌
  • 番茄英語和英語流利說哪個好,對比分析體驗課後的點評!
    大家都應該有使用英語學習app軟體學習英語的經歷吧,之前我曾經使用過番茄英語和英語流利說這兩款app軟體,這裡和大家分析一下番茄英語和英語流利說哪個好
  • 「英語流利說」商業化進程 案例研究院 · 熱點案例分享(16)
    「英語流利說」是一款融合創新口語教學理念和尖端語音評估技術的英語口語學習應用,讓你「忍不住開口說英語」,幫你真正擺脫「啞巴英語」!2013年2月,英語流利說iOS版本一經推出,便在多個國家和地區的App Store獲得推薦,並於同年被蘋果評為「年度精選」應用。
  • CEO面對面 英語流利說 王翌
    王翌將與我們分享在短短的三年內他是如何帶領三人創始團隊成長為一支超過百人的團隊;如何從零開始,讓流利說成長為一個擁有超過2千5百萬用戶的英語學習類App,並且成功融資數千萬美金。他將對比自己之前在矽谷Google、成熟創業公司AdChina, 以及創立自己公司的經驗;也會分享他關於加入一個創業公司還是自己創立一家公司、在中國還是矽谷創業的觀點看法。
  • 英語流利說後端基礎組件演進
    英語流利說的用戶數一直保持著高速的增長,這個過程中如何保證給用戶提供穩定可靠的服務一直都是一個不小的挑戰,在這裡用簡短篇幅簡單介紹一下在這過程中我們經歷的一些事情以及解決方案
  • 直播 | 英語流利說商業產品負責人朱小凡:Learn different,用AI老師改變英語教育
    北京時間12月27日(周四)晚8點,我們很開心邀請到了英語流利說商業產品負責人——朱小凡,他將與大家分享的主題是「Learn different,用AI老師改變英語教育」。將以流利說為案例,來探討產品經理應該怎麼看產業中的機會,以及我們是怎麼認知AI在教育行業中的作用並將其產品化和商業化的。
  • 最低350元/場,英語流利說招募兼職啦!
    流利說是領先的科技驅動的教育公司,由王翌博士和胡哲人、林暉博士於2012年9月共同創立。
  • 英語流利說和英語趣配音哪個好?對比後發現區別相差很大
    現在很多人都在關注英語的學習,而且不僅僅是為了考試,很多年輕人也想利用一些零碎的時間來學習英語,口語好不好,其實是非常重要的事情。
  • [上海]英語流利說年後第一招,後端/iOS/自然語言處理/機器學習
    關注公眾號回復職位關鍵字查看最新內推職位,如「產品」、 「設計」、"後端"、「測試」、 「iOS」 、「算法」 、「安卓」、 「web前端」、「運營」、「商務」英語流利說