基于terraform的阿里云基礎(chǔ)設(shè)施代碼化

1. 概述

早些年,我們的運(yùn)維的大致過(guò)程是:開發(fā)人員開發(fā)好應(yīng)用軟件,然后提交給運(yùn)維人員系統(tǒng)架構(gòu)圖娩井,運(yùn)維根據(jù)系統(tǒng)架構(gòu)圖,設(shè)計(jì)出部署架構(gòu)圖似袁,還需要做好系統(tǒng)所需的前期工作洞辣,比如部署服務(wù)器、打通網(wǎng)絡(luò)昙衅、調(diào)整服務(wù)器參數(shù)等等工作扬霜。隨后選定日期進(jìn)行生產(chǎn)上線,上線完畢后和開發(fā)绒尊、業(yè)務(wù)確認(rèn)成功與否畜挥。在這樣基礎(chǔ)設(shè)施管理過(guò)程中遇到的問(wèn)題:

  1. 速度比較慢,發(fā)布前需要加班準(zhǔn)備基礎(chǔ)環(huán)境婴谱,因?yàn)樾枰芏鄷r(shí)間準(zhǔn)備基礎(chǔ)環(huán)境蟹但;
  2. 難于版本化,很難追溯配置版本變更歷史谭羔,因?yàn)橛龅絾?wèn)題時(shí)需要登錄服務(wù)器手工排錯(cuò)或部署华糖,會(huì)造成我們完全不知道服務(wù)器的狀態(tài)也很難知道配置的變更歷史;
  3. 容易出錯(cuò)和遺漏配置瘟裸,因?yàn)槭謩?dòng)執(zhí)行經(jīng)常遺漏配置導(dǎo)致服務(wù)運(yùn)行不起來(lái)從而造成不必要的損失客叉;
  4. 無(wú)法根據(jù)業(yè)務(wù)需求,隨時(shí)動(dòng)態(tài)增加環(huán)境话告;
  5. 手動(dòng)部署的步驟有文檔兼搏,但是文檔維護(hù)起來(lái)很繁瑣并且常常更新不及時(shí)。

綜上所訴為了解決這些問(wèn)題我們使用terraform來(lái)對(duì)基礎(chǔ)設(shè)施進(jìn)行版本控制沙郭、持續(xù)集成佛呻、自動(dòng)化測(cè)試、自動(dòng)化部署病线, 使得基礎(chǔ)設(shè)施及配置可以按需動(dòng)態(tài)的創(chuàng)建吓著、釋放和重建并保持一致性鲤嫡,這些改變可以人為觸發(fā)也可以系統(tǒng)自動(dòng)觸發(fā)。

2. 基礎(chǔ)設(shè)施即代碼(IaC)

基礎(chǔ)設(shè)施即代碼(IaC) 主要是指使用代碼來(lái)跟蹤和管理基礎(chǔ)架構(gòu)資源绑莺,使用代碼來(lái)定義暖眼、部署、更新纺裁、銷毀資源诫肠,代碼通常保存在版本控制系統(tǒng)中, 版本控制系統(tǒng)可以提供完整的歷史記錄。

基礎(chǔ)設(shè)施即代碼有四項(xiàng)關(guān)鍵原則:

再生性:環(huán)境中的任何元素都可以輕松復(fù)制欺缘。
一致性:無(wú)論何時(shí)区赵,創(chuàng)建的環(huán)境各個(gè)元素的配置也是是完全相同的。
可見性:所有對(duì)環(huán)境的變更應(yīng)該容易理解浪南、可審計(jì)笼才、受版本控制。
快速反饋:能夠頻繁络凿、容易地進(jìn)行變更骡送,并快速知道變更是否正確。

基礎(chǔ)設(shè)施即代碼的目標(biāo):
標(biāo)準(zhǔn)化: 以代碼來(lái)定義環(huán)境絮记,實(shí)現(xiàn)開發(fā)環(huán)境摔踱、測(cè)試環(huán)境、生產(chǎn)環(huán)境的標(biāo)準(zhǔn)化怨愤。
自動(dòng)化: 用自動(dòng)化工具來(lái)驅(qū)動(dòng)代碼準(zhǔn)備環(huán)境派敷。包括創(chuàng)建環(huán)境、更新環(huán)境以及銷毀環(huán)境撰洗。
可視化: 靠監(jiān)控來(lái)可視化環(huán)境信息篮愉。環(huán)境當(dāng)前狀態(tài)可視、環(huán)境變更歷史可視差导、可追溯试躏。

基礎(chǔ)設(shè)施即代碼帶來(lái)的核心便利: IaC旨在利用系統(tǒng)配置來(lái)緩解最常見的痛點(diǎn),特別是以前配置一個(gè)新環(huán)境通常需要花費(fèi)大量的時(shí)間设褐。每一個(gè)環(huán)境都需要單獨(dú)配置颠蕴,且如果某處出現(xiàn)錯(cuò)誤,通常需重新進(jìn)行整個(gè)過(guò)程助析。IaC消除了這些痛點(diǎn)犀被,并向開發(fā)者和運(yùn)維人員提供了以下額外的便利:

  1. 重新使用常見的腳本變得相對(duì)簡(jiǎn)單了。
    2 .整個(gè)供應(yīng)過(guò)程可實(shí)現(xiàn)自動(dòng)化外冀,連供應(yīng)硬件都可以作為持續(xù)交付過(guò)程的一部分寡键。
  2. 版本控制,可以根據(jù)需要測(cè)試和回滾較新的配置锥惋。
  3. 同行審查和腳本強(qiáng)化昌腰。不需手動(dòng)地從文檔或內(nèi)存中配置,就可以對(duì)腳本進(jìn)行審查膀跌、更新和持續(xù)改進(jìn)遭商。
  4. 文檔是自動(dòng)的,因?yàn)楸举|(zhì)上它就是腳本本身捅伤。
  5. 過(guò)程可以被測(cè)試劫流。

3. Terraform概覽

HashiCorp Terraform 是一個(gè)IT基礎(chǔ)架構(gòu)自動(dòng)化編排工具,可以用代碼來(lái)管理維護(hù) IT 資源丛忆。Terraform的命令行接口(CLI)提供一種簡(jiǎn)單機(jī)制祠汇,用于將配置文件部署到阿里云或其他任意支持的云上,并對(duì)其進(jìn)行版本控制熄诡。它編寫了描述云資源拓?fù)涞呐渲梦募械幕A(chǔ)結(jié)構(gòu)可很,例如虛擬機(jī)、存儲(chǔ)帳戶和網(wǎng)絡(luò)接口凰浮。

Terraform是一個(gè)高度可擴(kuò)展的工具我抠,通過(guò) Provider 來(lái)支持新的基礎(chǔ)架構(gòu)。Terraform能夠讓您在阿里云上輕松使用 簡(jiǎn)單模板語(yǔ)言 來(lái)定義袜茧、預(yù)覽和部署云基礎(chǔ)結(jié)構(gòu)菜拓。您可以使用Terraform來(lái)創(chuàng)建、修改笛厦、刪除ECS纳鼎、VPC、RDS裳凸、SLB等多種資源贱鄙。

阿里云作為國(guó)內(nèi)第一家與 Terraform 集成的云廠商,terraform-provider-alicloud目前已經(jīng)提供了超過(guò) 163 個(gè) Resource 和 113 個(gè) Data Source姨谷,覆蓋計(jì)算贰逾,存儲(chǔ),網(wǎng)絡(luò)菠秒,負(fù)載均衡疙剑,CDN,容器服務(wù)践叠,中間件言缤,訪問(wèn)控制,數(shù)據(jù)庫(kù)等超過(guò)35款產(chǎn)品禁灼,已經(jīng)滿足了大量大客戶的自動(dòng)化上云需求管挟。

從 Terraform 0.12.2 版本開始,阿里云支持將對(duì)象存儲(chǔ)服務(wù) OSS 作為標(biāo)準(zhǔn)的Remote State Backend弄捕,開始提供遠(yuǎn)端存儲(chǔ) State 的能力僻孝,在提高 state 安全性的同時(shí)导帝,提升多人協(xié)作效率。

為了給開發(fā)者提供“開箱即用”的使用體驗(yàn)穿铆,阿里云提供了豐富多樣的ModulesExamples您单,覆蓋計(jì)算,存儲(chǔ)荞雏,網(wǎng)絡(luò)虐秦,中間件,數(shù)據(jù)庫(kù)等多個(gè)產(chǎn)品和使用場(chǎng)景凤优,歡迎大家使用和貢獻(xiàn)自己的Module悦陋。

  • 將基礎(chǔ)結(jié)構(gòu)部署到多個(gè)云

    Terraform適用于多云方案,將類似的基礎(chǔ)結(jié)構(gòu)部署到阿里云筑辨、其他云提供商或者本地?cái)?shù)據(jù)中心俺驶。開發(fā)人員能夠使用相同的工具和相似的配置文件同時(shí)管理不同云提供商的資源。

  • 自動(dòng)化管理基礎(chǔ)結(jié)構(gòu)

    Terraform能夠創(chuàng)建配置文件的模板棍辕,以可重復(fù)痒钝、可預(yù)測(cè)的方式定義、預(yù)配和配置ECS資源痢毒,減少因人為因素導(dǎo)致的部署和管理錯(cuò)誤送矩。能夠多次部署同一模板,創(chuàng)建相同的開發(fā)哪替、測(cè)試和生產(chǎn)環(huán)境栋荸。

  • 基礎(chǔ)架構(gòu)即代碼(Infrastructure as Code)

    可以用代碼來(lái)管理維護(hù)資源。允許保存基礎(chǔ)設(shè)施狀態(tài)凭舶,從而使您能夠跟蹤對(duì)系統(tǒng)(基礎(chǔ)設(shè)施即代碼)中不同組件所做的更改晌块,并與其他人共享這些配置 。

  • 降低開發(fā)成本

    您通過(guò)按需創(chuàng)建開發(fā)和部署環(huán)境來(lái)降低成本帅霜。并且匆背,您可以在系統(tǒng)更改之前進(jìn)行評(píng)估。

4. 實(shí)現(xiàn)目標(biāo)

4.1 阿里云基礎(chǔ)網(wǎng)絡(luò)規(guī)劃

使用Terraform創(chuàng)建和管理阿里云生產(chǎn)環(huán)境VPC身冀、非生產(chǎn)環(huán)境VPC钝尸、Infra環(huán)境VPC, 要求如下:

  1. 所有環(huán)境使用云企業(yè)網(wǎng)互聯(lián)互通搂根,限制生產(chǎn)環(huán)境和非生產(chǎn)環(huán)境通信珍促;
  2. 網(wǎng)絡(luò)拓?fù)渲邪珼MZ、Application剩愧、Database三個(gè)隔離區(qū)域猪叙;
  3. 每個(gè)隔離區(qū)域包含阿里云G、F、H三個(gè)可用區(qū)穴翩;

4.2 阿里云用戶規(guī)劃

使用terraform創(chuàng)建和管理阿里云Ram用戶組和用戶犬第, 要求如下:

  1. 創(chuàng)建運(yùn)維,DBA,Admin,開發(fā)用戶組
  2. 為每個(gè)用戶組分配默認(rèn)權(quán)限
  3. 創(chuàng)建用戶并加入用戶組中, 添加default用戶到所有用戶組中

4.3 阿里云安全組規(guī)劃

  1. 創(chuàng)建基礎(chǔ)安全組芒帕, 環(huán)境-應(yīng)用歉嗓、環(huán)境-DMZ、環(huán)境數(shù)據(jù)庫(kù)
  2. 根據(jù)基礎(chǔ)網(wǎng)絡(luò)規(guī)劃中劃分的隔離區(qū)域和環(huán)境創(chuàng)建安全組副签,
  3. 配置安全組規(guī)則, database安全組允許applicaiton安全組訪問(wèn)基矮, application安全允許DMZ安全組訪問(wèn)淆储, DMZ安全組不能訪問(wèn)database安全組

4.4 阿里云負(fù)載均衡規(guī)劃

4.5 阿里云OSS規(guī)劃

4.6 阿里云Mysql數(shù)據(jù)庫(kù)

4.7 阿里云Redis數(shù)據(jù)庫(kù)

4.8 阿里云Kubernetes

5. Terraform的具體實(shí)現(xiàn)

5.1 基礎(chǔ)環(huán)境準(zhǔn)備

5.2 代碼目錄結(jié)構(gòu)劃分

5.3 阿里云基礎(chǔ)網(wǎng)絡(luò)規(guī)劃的實(shí)現(xiàn)

5.4 阿里云用戶規(guī)劃的實(shí)現(xiàn)

5.5 阿里云安全組規(guī)劃的實(shí)現(xiàn)

5.6 阿里云負(fù)載均衡規(guī)劃的實(shí)現(xiàn)

5.7 阿里云OSS規(guī)劃的實(shí)現(xiàn)

5.8 使用git管理Terraform代碼

5.9 使用terraform快速增加新環(huán)境

6. 總結(jié)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市家浇,隨后出現(xiàn)的幾起案子本砰,更是在濱河造成了極大的恐慌,老刑警劉巖钢悲,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件点额,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡莺琳,警方通過(guò)查閱死者的電腦和手機(jī)还棱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惭等,“玉大人珍手,你說(shuō)我怎么就攤上這事〈亲觯” “怎么了琳要?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秤茅。 經(jīng)常有香客問(wèn)我稚补,道長(zhǎng),這世上最難降的妖魔是什么框喳? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任课幕,我火速辦了婚禮,結(jié)果婚禮上五垮,老公的妹妹穿的比我還像新娘撰豺。我一直安慰自己,他們只是感情好拼余,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布污桦。 她就那樣靜靜地躺著,像睡著了一般匙监。 火紅的嫁衣襯著肌膚如雪凡橱。 梳的紋絲不亂的頭發(fā)上小作,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音稼钩,去河邊找鬼顾稀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛坝撑,可吹牛的內(nèi)容都是我干的静秆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼巡李,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抚笔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起侨拦,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤殊橙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后狱从,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膨蛮,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年季研,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敞葛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡与涡,死狀恐怖制肮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情递沪,我是刑警寧澤豺鼻,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站款慨,受9級(jí)特大地震影響儒飒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜檩奠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一桩了、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧埠戳,春花似錦井誉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春在岂,著一層夾襖步出監(jiān)牢的瞬間奔则,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工蔽午, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留易茬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓及老,卻偏偏與公主長(zhǎng)得像抽莱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骄恶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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