## 为什么需要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. 支持市场上大多数主流的云
![cloud](https://img.kancloud.cn/ed/1e/ed1e0e675f9f2657987f2ca181149a1f_1564x586.jpg)
## 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)
![架构](https://img.kancloud.cn/6a/71/6a71273ca75666401c5f3cbaa7168efd_2354x1244.png)
2. terraform执行流程
![流程](https://img.kancloud.cn/9a/d4/9ad49755a41632123d1fdd6bb4c9e14f_2070x1104.png)
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-通信