## 為什么需要Terraform ##
由于國內云服務平臺眾多,每個云服務平臺都有自己的api,每個api都非常復雜,云從業者沒有辦法去挨個學習每個平臺的api去管理云平臺的云資源,于是有很多公司便出了很多方案和產品,其中亞馬遜公司的cloudformation(僅僅適用于aws).HashiCorp公司的Terraform(適用于多個云平臺)解決了從網絡組件到實際服務器映像定義基礎架構即代碼的問題,也就是說不管你用什么與云,使用terraform,你大部分的terraform的代碼都很相似(相似但是不是完全一樣),無論是aws,aliyun還是azure他們的大部分terraform代碼基本非常相似.
## Terraform是什么 ##
1. Terraform是由HashiCorp公司在2014年左右推出的開源工具(https://www.hashicorp.com/products/terraform).Terraform 是一個 IT 基礎架構自動化編排工具,也就是自動化管理我們云端的基礎設置,比如網絡,安全,cpu,memory,disk等,也會包括管理包括數據庫,域名,K8s等軟件服務.
2. Terraform只是HashiCorp旗下一款產品,旗下還有Packer Vagrant Vault Nomad Consul等非常有名的產品,如果有事云從業者建議學習使用Terraform旗下的大部分產品
3. HashiCorp目前還沒有IPO上市,目前估值50億美金,據傳會在2021-2022上市
3. HashiCorp跟aws,azure,gcp,alicloud,cisco,oracle等都是合作伙伴,目前github上面光terraform就有26.6K stark和6.6K Fork,contributor有1500多人,看見terraform的龐大的用戶群體和開源支持者
4. 支持市場上大多數主流的云

## Terraform 能做什么 ##
1. 它的口號是 "Write, Plan, and create Infrastructure as Code", 基礎架構即代碼,也就是說它能用代碼來管理這些基礎設施.Terraform 幾乎可以支持所有市面上主流的云服務,也就是說她一同了一套云服務接口,各個廠家通過實現自己的provider來實現對terraform的支持
1.1 阿里云的例子
```
provider "alicloud" {
#這是變量,要用實際AccessKeyId
access_key = "xxx"
#這是變量,要用實際AccessKeySecret
secret_key = "xxx"
region = "cn-beijing"
#version = "~> 1.5.0"
}
resource "alicloud_vpc" "vpc" {
vpc_name = "my_vpc"
cidr_block = "172.16.0.0/16"
}
resource "alicloud_vswitch" "vswitch" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.0.0/24"
zone_id = "cn-beijing-b"
vswitch_name = "my_switch"
}
```
2.1 aws 的例子
```
provider "aws" {
#這是變量,要用實際AccessKeyId
access_key = "xxx"
#這是變量,要用實際AccessKeySecret
secret_key = "xxx"
region = "us-west-2"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "main" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone_id = "cn-beijing-b"
}
```
## Terraform 的架構 ##
1. Terraform本身是基于插件的架構,可擴展性很強,可以方便程序員對Terraform進行擴展。Terraform從邏輯上可以分為兩層,核心層(Terraform Core)和插件層(Terraform Provider)

2. terraform執行流程

3. 核心層其實就是terraform的命令行工具,它是用go語言開發的,它負責:
2.1. 讀取.tf代碼,并對配置文件和代碼進行變量取值替換
2.2. 資源狀態文件管理
2.3. 依據圖論,對代碼中創建的資源依賴關系進行分析,并創建依賴關系圖譜
2.4. 根據依賴關系圖譜,執行資源先后創建。對于沒有依賴關系的資源,會并行進行創建(缺省10個并行進程),這也是Terraform能夠高效快速管理云資源的原因。
2.5. 用RPC調用插件層
4. 插件層也是由go語言開發的,Terraform有超過250個不同的插件,它們負責
接受核心層的RPC調用和具體提供某一項服務的執行
4.1. Provider負責與外界API的集成,比如騰訊云和阿里云Provider就提供了在云上創建、修改、刪除云資源的功能。這個插件負責和云端API的接口,并提供一層抽象,這樣程序員可以在不了解API細節的情況下,通過terraform來編排資源。它負責:初始化以及外界API通信,外界API的認證,定義云資源與外界服務的關系
4.2. Provisioner負責在資源創建或者刪除完成后,執行一些腳本.比如Puppet Provisioner就可以在云虛擬機資源創建完成后,在該資源上下載、安裝、配置Puppet agent.
- 【概要簡介】1.001-簡介-本課程體系簡介
- 【概要簡介】1.002-簡介-云的發展趨勢
- 【概要簡介】1.003-簡介-國內主流的云服務平臺
- 【概要簡介】1.004-簡介-Terraform云平臺devops的瑞士軍刀
- 【快速入門】2.000-快速入門-云后臺創建主機
- 【快速入門】2.001-快速入門-創建主機-先查詢資源
- 【快速入門】2.002-快速入門-創建主機-阿里云
- 【快速入門】2.003-快速入門-創建主機-亞馬遜aws
- 【快速入門】2.100-快速入門-官方網站學習資料
- 【快速入門】2.101-快速入門-Terraform主要的文件.
- 【快速入門】2.102-快速入門-創建虛擬網絡
- 【快速入門】1.103-快速入門-創建安全和規則
- 【快速入門】2.104-快速入門-創建云盤
- 【快速入門】2.105-快速入門-創建Ecs主機服務
- 【快速入門】2.200-快速入門-搭建Nginx
- 【快速入門】2.201-快速入門-搭建Nginx-分拆main文件
- 【快速入門】2.203-快速入門-購買固定IP并綁定到主機
- 【快速入門】2.204-快速入門-綁定域名到自己的主頁
- 【快速入門】2.205-快速入門-申請免費的https證書并綁定TODO
- 【快速入門】2.300-快速入門-創建Oss存儲并搭建靜態網站
- 【快速入門】2.300-快速入門-Cdn-TODO
- 【中級進階】3.101-中級進階-用Packer創建Wordpress的主機鏡像
- 【中級進階】3.102-中級進階-利用自己的鏡像創建Ecs主機
- 【中級進階】3.104-中級進階-用自己鏡像搭建負載均衡的Wordpress網站
- 【中級進階】3.105-中級進階-利用彈性伸縮ESS創建SLB對應的動態數量的ECS服務器
- 【中級進階】3.106-中級進階-自定義Module搭建多個負載均衡的Wordpress網站
- 【中級進階】3.200-中級進階-備份多個Wordpress服務器的日志到ossTODO
- 【中級進階】3.300-中級進階-創建Ecs快照服務
- 【中級進階】3.400-中級進階-Datasource查詢
- 【中級進階】3.500-中級進階-保存Terraform的state文件
- 【中級進階】3.600-中級進階-Variables and environment variables
- 【中級進階】3.700-中級進階-Terraform命令解析
- 【高級深入】4.000-高級深入-創建容器鏡像服務
- 【高級深入】4.001-高級深入-編譯自己的docker鏡像并上傳到Aliyun cr
- 【高級深入】4.002-高級深入-Terraform創建Kubernetes集群
- 【高級深入】4.003-高級深入-Terraform在Kubernetes集群中部署Wordpress應用
- 【高級深入】4.100-高級深入-使用云服務平臺提供的module來創建服務資源
- 【高級深入】4.200-高級深入-同步Terraform的狀態.到terraform cloud
- 【高級深入】4.300-高級深入-Terraform的語法
- 【高級深入】4.400-高級深入-Terraform與其Ansible一起使用
- 【高級深入】4.500-高級深入-Terraform的provisioner
- 【高級深入】4.600-高級深入-Snat
- 【高級深入】4.601-高級深入-Dnat
- 4.602-高級深入-Vpc-vpc通信
- 【高級深入】4.603-高級深入-Switch與switch-通信