引言
站在SRE的视角,公有云的兴起及大规模普及应用,解决了过去一直无法根本解决的成本和资源快速扩展问题,但同时又衍生出了新的问题。
问题1:容灾机制对用户不可见,出现问题只能等待云商解决,用户缺乏主动可控手段,而近几年各大主流云商出现多次重大故障,使得使用单个公有云成为了一个风险较高的选择
问题2:公有云本质上是商业属性,因各自的产品及机房节点布局差异,单个公有云很难完全满足业务需求,但各个云商的一些壁垒限制,多云资源的管理成本又变的较高,尤其是自动化的开发适配成本
Terraform的价值
Terraform的出现有效的解决了上述问题,它的理念是基础设施即代码,允许用户通过编写代码的方式构建、变更和版本化云基础资源,下面我们先谈谈Terraform的优势
1、支持多个主流云商,如AWS、Azure、阿里云等,可以实现统一管理不同公有云的资源
2、所有的资源创建及变更都以代码形式存在,在遇到灾难故障时,可以快速在当前环境或者其它云上恢复业务
3、声明式的语法,使得定义资源变的很简单,可以实现复杂基础设施(数据库、网络等)的自动化部署
4、Terraform的配置文件可以通过Git等版本控制系统进行管理,便于团队协作和变更追踪
5、可以与CI/CD系统、工单系统等进行集成,实现自动化的部署及资源创建、回收。
Terraform的使用
安装
Terraform的安装使用也非常简单,以Linux举例,执行以下命令即可完成安装
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
示例
只需通过创建一个或者多个.tf文件用来描述需要管理的基础设施,即可实现资源管理,下面为示例:
在阿里云上创建一个VPC和一个交换机
provider "alicloud" {
region = "cn-hangzhou"
}
resource "alicloud_vpc" "default" {
vpc_name = "terraform_test_vpc"
cidr_block = "10.0.0.0/8"
}
resource "alicloud_vswitch" "default" {
vpc_id = alicloud_vpc.default.id
cidr_block = "10.0.0.0/16"
availability_zone = "cn-hangzhou-b"
}
在AWS和Azure上同时创建负载均衡
provider "aws" {
region = "us-west-2"
}
provider "azurerm" {
subscription_id = "YOUR_SUBSCRIPTION_ID"
}
resource "aws_elb" "example" {
name = "example-elb"
availability_zones = ["us-west-2a", "us-west-2b"]
}
resource "azurerm_load_balancer" "example" {
name = "example-lb"
location = "East US"
resource_group_name = "example-resource-group"
}
常用命令
# 在包含有Terraform配置文件的目录执行,用来初始化Terraform工作空间,执行命令后会下载所需的插件,如AWS、aliyun等
terraform init
# 预览变更的配置,用来执行部署前的检查
terraform plan
# 执行配置文件的变更计划
terraform apply
# 验证结果
terraform show
# 销毁所有配置文件定义的资源
terraform destroy