1. 概述
早些年,我們的運維的大致過程是:開發(fā)人員開發(fā)好應(yīng)用軟件,然后提交給運維人員系統(tǒng)架構(gòu)圖,運維根據(jù)系統(tǒng)架構(gòu)圖,設(shè)計出部署架構(gòu)圖,還需要做好系統(tǒng)所需的前期工作,比如部署服務(wù)器、打通網(wǎng)絡(luò)、調(diào)整服務(wù)器參數(shù)等等工作。隨后選定日期進行生產(chǎn)上線,上線完畢后和開發(fā)、業(yè)務(wù)確認成功與否。在這樣基礎(chǔ)設(shè)施管理過程中遇到的問題:
- 速度比較慢,發(fā)布前需要加班準備基礎(chǔ)環(huán)境,因為需要很多時間準備基礎(chǔ)環(huán)境;
- 難于版本化,很難追溯配置版本變更歷史,因為遇到問題時需要登錄服務(wù)器手工排錯或部署,會造成我們完全不知道服務(wù)器的狀態(tài)也很難知道配置的變更歷史;
- 容易出錯和遺漏配置,因為手動執(zhí)行經(jīng)常遺漏配置導致服務(wù)運行不起來從而造成不必要的損失;
- 無法根據(jù)業(yè)務(wù)需求,隨時動態(tài)增加環(huán)境;
- 手動部署的步驟有文檔,但是文檔維護起來很繁瑣并且常常更新不及時。
綜上所訴為了解決這些問題我們使用terraform來對基礎(chǔ)設(shè)施進行版本控制、持續(xù)集成、自動化測試、自動化部署, 使得基礎(chǔ)設(shè)施及配置可以按需動態(tài)的創(chuàng)建、釋放和重建并保持一致性,這些改變可以人為觸發(fā)也可以系統(tǒng)自動觸發(fā)。
2. 基礎(chǔ)設(shè)施即代碼(IaC)
基礎(chǔ)設(shè)施即代碼(IaC) 主要是指使用代碼來跟蹤和管理基礎(chǔ)架構(gòu)資源,使用代碼來定義、部署、更新、銷毀資源,代碼通常保存在版本控制系統(tǒng)中, 版本控制系統(tǒng)可以提供完整的歷史記錄。
基礎(chǔ)設(shè)施即代碼有四項關(guān)鍵原則:
再生性:環(huán)境中的任何元素都可以輕松復制。
一致性:無論何時,創(chuàng)建的環(huán)境各個元素的配置也是是完全相同的。
可見性:所有對環(huán)境的變更應(yīng)該容易理解、可審計、受版本控制。
快速反饋:能夠頻繁、容易地進行變更,并快速知道變更是否正確。
基礎(chǔ)設(shè)施即代碼的目標:
標準化: 以代碼來定義環(huán)境,實現(xiàn)開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境的標準化。
自動化: 用自動化工具來驅(qū)動代碼準備環(huán)境。包括創(chuàng)建環(huán)境、更新環(huán)境以及銷毀環(huán)境。
可視化: 靠監(jiān)控來可視化環(huán)境信息。環(huán)境當前狀態(tài)可視、環(huán)境變更歷史可視、可追溯。
基礎(chǔ)設(shè)施即代碼帶來的核心便利: IaC旨在利用系統(tǒng)配置來緩解最常見的痛點,特別是以前配置一個新環(huán)境通常需要花費大量的時間。每一個環(huán)境都需要單獨配置,且如果某處出現(xiàn)錯誤,通常需重新進行整個過程。IaC消除了這些痛點,并向開發(fā)者和運維人員提供了以下額外的便利:
- 重新使用常見的腳本變得相對簡單了。
2 .整個供應(yīng)過程可實現(xiàn)自動化,連供應(yīng)硬件都可以作為持續(xù)交付過程的一部分。 - 版本控制,可以根據(jù)需要測試和回滾較新的配置。
- 同行審查和腳本強化。不需手動地從文檔或內(nèi)存中配置,就可以對腳本進行審查、更新和持續(xù)改進。
- 文檔是自動的,因為本質(zhì)上它就是腳本本身。
- 過程可以被測試。
3. Terraform概覽
HashiCorp Terraform 是一個IT基礎(chǔ)架構(gòu)自動化編排工具,可以用代碼來管理維護 IT 資源。Terraform的命令行接口(CLI)提供一種簡單機制,用于將配置文件部署到阿里云或其他任意支持的云上,并對其進行版本控制。它編寫了描述云資源拓撲的配置文件中的基礎(chǔ)結(jié)構(gòu),例如虛擬機、存儲帳戶和網(wǎng)絡(luò)接口。
Terraform是一個高度可擴展的工具,通過 Provider 來支持新的基礎(chǔ)架構(gòu)。Terraform能夠讓您在阿里云上輕松使用 簡單模板語言 來定義、預(yù)覽和部署云基礎(chǔ)結(jié)構(gòu)。您可以使用Terraform來創(chuàng)建、修改、刪除ECS、VPC、RDS、SLB等多種資源。
阿里云作為國內(nèi)第一家與 Terraform 集成的云廠商,terraform-provider-alicloud目前已經(jīng)提供了超過 163 個 Resource 和 113 個 Data Source,覆蓋計算,存儲,網(wǎng)絡(luò),負載均衡,CDN,容器服務(wù),中間件,訪問控制,數(shù)據(jù)庫等超過35款產(chǎn)品,已經(jīng)滿足了大量大客戶的自動化上云需求。
從 Terraform 0.12.2 版本開始,阿里云支持將對象存儲服務(wù) OSS 作為標準的Remote State Backend,開始提供遠端存儲 State 的能力,在提高 state 安全性的同時,提升多人協(xié)作效率。
為了給開發(fā)者提供“開箱即用”的使用體驗,阿里云提供了豐富多樣的Modules 和Examples,覆蓋計算,存儲,網(wǎng)絡(luò),中間件,數(shù)據(jù)庫等多個產(chǎn)品和使用場景,歡迎大家使用和貢獻自己的Module。
-
將基礎(chǔ)結(jié)構(gòu)部署到多個云
Terraform適用于多云方案,將類似的基礎(chǔ)結(jié)構(gòu)部署到阿里云、其他云提供商或者本地數(shù)據(jù)中心。開發(fā)人員能夠使用相同的工具和相似的配置文件同時管理不同云提供商的資源。
-
自動化管理基礎(chǔ)結(jié)構(gòu)
Terraform能夠創(chuàng)建配置文件的模板,以可重復、可預(yù)測的方式定義、預(yù)配和配置ECS資源,減少因人為因素導致的部署和管理錯誤。能夠多次部署同一模板,創(chuàng)建相同的開發(fā)、測試和生產(chǎn)環(huán)境。
-
基礎(chǔ)架構(gòu)即代碼(Infrastructure as Code)
可以用代碼來管理維護資源。允許保存基礎(chǔ)設(shè)施狀態(tài),從而使您能夠跟蹤對系統(tǒng)(基礎(chǔ)設(shè)施即代碼)中不同組件所做的更改,并與其他人共享這些配置 。
-
降低開發(fā)成本
您通過按需創(chuàng)建開發(fā)和部署環(huán)境來降低成本。并且,您可以在系統(tǒng)更改之前進行評估。
4. 實現(xiàn)目標
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ò)拓撲中包含DMZ、Application、Database三個隔離區(qū)域;
- 每個隔離區(qū)域包含阿里云G、F、H三個可用區(qū);
4.2 阿里云用戶規(guī)劃
使用terraform創(chuàng)建和管理阿里云Ram用戶組和用戶, 要求如下:
- 創(chuàng)建運維,DBA,Admin,開發(fā)用戶組
- 為每個用戶組分配默認權(quán)限
- 創(chuàng)建用戶并加入用戶組中, 添加default用戶到所有用戶組中
4.3 阿里云安全組規(guī)劃
- 創(chuàng)建基礎(chǔ)安全組, 環(huán)境-應(yīng)用、環(huán)境-DMZ、環(huán)境數(shù)據(jù)庫
- 根據(jù)基礎(chǔ)網(wǎng)絡(luò)規(guī)劃中劃分的隔離區(qū)域和環(huán)境創(chuàng)建安全組,
- 配置安全組規(guī)則, database安全組允許applicaiton安全組訪問, application安全允許DMZ安全組訪問, DMZ安全組不能訪問database安全組