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)題:
- 速度比較慢,發(fā)布前需要加班準(zhǔn)備基礎(chǔ)環(huán)境婴谱,因?yàn)樾枰芏鄷r(shí)間準(zhǔn)備基礎(chǔ)環(huán)境蟹但;
- 難于版本化,很難追溯配置版本變更歷史谭羔,因?yàn)橛龅絾?wèn)題時(shí)需要登錄服務(wù)器手工排錯(cuò)或部署华糖,會(huì)造成我們完全不知道服務(wù)器的狀態(tài)也很難知道配置的變更歷史;
- 容易出錯(cuò)和遺漏配置瘟裸,因?yàn)槭謩?dòng)執(zhí)行經(jīng)常遺漏配置導(dǎo)致服務(wù)運(yùn)行不起來(lái)從而造成不必要的損失客叉;
- 無(wú)法根據(jù)業(yè)務(wù)需求,隨時(shí)動(dòng)態(tài)增加環(huán)境话告;
- 手動(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)維人員提供了以下額外的便利:
- 重新使用常見的腳本變得相對(duì)簡(jiǎn)單了。
2 .整個(gè)供應(yīng)過(guò)程可實(shí)現(xiàn)自動(dòng)化外冀,連供應(yīng)硬件都可以作為持續(xù)交付過(guò)程的一部分寡键。 - 版本控制,可以根據(jù)需要測(cè)試和回滾較新的配置锥惋。
- 同行審查和腳本強(qiáng)化昌腰。不需手動(dòng)地從文檔或內(nèi)存中配置,就可以對(duì)腳本進(jìn)行審查膀跌、更新和持續(xù)改進(jìn)遭商。
- 文檔是自動(dòng)的,因?yàn)楸举|(zhì)上它就是腳本本身捅伤。
- 過(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)穿铆,阿里云提供了豐富多樣的Modules 和Examples您单,覆蓋計(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, 要求如下:
- 所有環(huán)境使用云企業(yè)網(wǎng)互聯(lián)互通搂根,限制生產(chǎn)環(huán)境和非生產(chǎn)環(huán)境通信珍促;
- 網(wǎng)絡(luò)拓?fù)渲邪珼MZ、Application剩愧、Database三個(gè)隔離區(qū)域猪叙;
- 每個(gè)隔離區(qū)域包含阿里云G、F、H三個(gè)可用區(qū)穴翩;
4.2 阿里云用戶規(guī)劃
使用terraform創(chuàng)建和管理阿里云Ram用戶組和用戶犬第, 要求如下:
- 創(chuàng)建運(yùn)維,DBA,Admin,開發(fā)用戶組
- 為每個(gè)用戶組分配默認(rèn)權(quán)限
- 創(chuàng)建用戶并加入用戶組中, 添加default用戶到所有用戶組中
4.3 阿里云安全組規(guī)劃
- 創(chuàng)建基礎(chǔ)安全組芒帕, 環(huán)境-應(yīng)用歉嗓、環(huán)境-DMZ、環(huán)境數(shù)據(jù)庫(kù)
- 根據(jù)基礎(chǔ)網(wǎng)絡(luò)規(guī)劃中劃分的隔離區(qū)域和環(huán)境創(chuàng)建安全組副签,
- 配置安全組規(guī)則, database安全組允許applicaiton安全組訪問(wèn)基矮, application安全允許DMZ安全組訪問(wèn)淆储, DMZ安全組不能訪問(wèn)database安全組