Terraform
是一种开源工具,用于安全高效地预览、配置和管理云基础架构和资源。
可以有效地构建、更改和版本控制基础设施的工具(基础架构自动化的编排工具)。它的目标是 “Write, Plan, and create Infrastructure as Code”, 基础架构即代码。Terraform 几乎可以支持所有市面上能见到的云服务。
功能优势
将基础结构部署到多个云
Terraform适用于多云方案,将相类似的基础结构部署到阿里云、其他云提供商或者本地数据中心。开发人员能够使用相同的工具和相似的配置文件同时管理不同云提供商的资源。
自动化管理基础结构
Terraform能够创建配置文件的模板,以可重复、可预测的方式定义和预配ECS资源,减少人为因素导致的部署和管理错误。能够多次部署同一模板,创建相同的开发、测试和生产环境。
基础架构即代码(Infrastructure as Code)
可以用代码来管理维护资源。允许保存基础设施状态,从而使您能够跟踪对系统(基础设施即代码)中不同组件所做的更改,并与其他人共享这些配置。
降低开发成本
您通过按需创建开发和部署环境来降低成本。并且,您可以在系统更改之前进行评估。
直接上手开干,使用Terraform创建一台ECS实例。
一 、安装
1、Terraform 下载地址:
https://www.terraform.io/downloads.html
2、本次使用centos7 进行yum 安装
#安装依赖
yum install -y yum-utils
#添加Terraform yum仓库
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
#安装terraform
yum -y install terraform
安装速度还是很快的。
3、查看安装版本:
二、初始化环境
1、初始化,创建一个文件夹
mkdir terraform_test
cd terraform_test
terraform_test作为terraform的配置文件夹,内部的每一个.tf,.tfvars文件都会被加载。
2、配置provider。
方便演示,直接把秘钥写在文件里,实际使用时,可以写在环境变量里,更加安全。
创建providers.tf文件,配置provider依赖。
provider "alicloud" {
access_key = "xxxxxxxx"
secret_key = "xxxxxxxx"
region = "cn-qingdao"
}
# provider这一行表明提供的阿里云的接口
# access_key和secret_key分别是阿里云的ak、sk。在阿里云的账户中可以获取
# region 是管理的区域
3、初始化环境
执行命令 terraform init初始化环境。会自动读取provider.tf 文件下载对应的依赖包。
terraform init
三、创建一台ECS实例
开始之前,我们需要确保填写了正确的个阿里云访问密钥(AccessKey)。 如上 二.2图所示。
为了方便操作,在此我们把key写在provides.tf中。
1、步骤
首先需要创建专有网络和交换机。
创建terraform.tf文件,输入以下内容,并保存在当前的执行目录中。
resource "alicloud_vpc" "vpc" {
vpc_name = "tf_test_foo"
cidr_block = "10.16.0.0/24"
}
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "10.16.0.0/26"
zone_id = "cn-beijing-b"
}
运行terraform plan 查看将被要执行的操作
操作命令:
terraform apply #开始创建。
terraform show #查看已创建的专有网络和交换机。
也可以登录VPC控制台查看专有网络和交换机的属性
2、在上一步创建的专有网络中创建一个安全组,并添加一个允许任何地址访问的安全组规则。
在terraform.tf文件中增加以下内容。
resource "alicloud_security_group" "default" {
name = "default"
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_all_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "1/65535"
priority = 1
security_group_id = alicloud_security_group.default.id
cidr_ip = "0.0.0.0/0"
}
操作命令:
terraform apply #开始创建。
terraform show #查看已创建的安全组和安全组规则。
您也可以登录ECS控制台查看安全组和安全组规则。
3、创建ECS实例。
在terraform.tf文件中增加以下内容。
resource "alicloud_instance" "instance" {
# cn-beijing
availability_zone = "cn-beijing-k"
security_groups = alicloud_security_group.default.*.id
# series III
instance_type = "ecs.s6-c1m1.small"
system_disk_category = "cloud_efficiency"
image_id = "aliyun_3_x64_20G_alibase_20230424.vhd"
instance_name = "ecs_name"
vswitch_id = alicloud_vswitch.vsw.id
internet_max_bandwidth_out = 10
}
操作命令:
terraform apply #开始创建。
terraform show #查看已创建的ECS实例。
4、操作样例
# VPC 资源
resource "alicloud_vpc" "vpc" {
vpc_name = "tf_test_foo"
cidr_block = "10.16.0.0/24"
}
# VSwitch 资源
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "10.16.0.0/26"
zone_id = "cn-beijing-b"
}
resource "alicloud_security_group" "default" {
name = "default"
vpc_id = alicloud_vpc.vpc.id
}
# 安全组
resource "alicloud_security_group_rule" "allow_all_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "1/65535"
priority = 1
security_group_id = alicloud_security_group.default.id
cidr_ip = "0.0.0.0/0"
}
# 创建ecs
resource "alicloud_instance" "instance" {
# cn-beijing
availability_zone = "cn-beijing-k"
security_groups = alicloud_security_group.default.*.id
# series III
instance_type = "ecs.s6-c1m1.small"
system_disk_category = "cloud_efficiency"
image_id = "aliyun_3_x64_20G_alibase_20230424.vhd"
instance_name = "ecs_name"
vswitch_id = alicloud_vswitch.vsw.id
internet_max_bandwidth_out = 10
}
通过上面我们可以通过安装Terraform 并且可以简单的代码来创建一台ecs实例。
四、Terraform常用命令:
terraform plan: 资源的预览
terraform apply: 资源的新建和变更
terraform show: 资源的展示
terraform destroy: 资源的释放
terraform import: 资源的导入
terraform taint: 标记资源为被污染
terraform output: 打印出参及其值
terraform state list: 列出当前state中的所有资源
terraform state show: 展示某一个资源的属性
terraform state pull: 获取当前state内容并展示
terraform state mv: 变更特定资源的存放地址
terraform refresh: 刷新当前state
terraform graph: 输出当前模板定义的资源关系图
terraform validate: 验证模板语法是否正确
Terraform详细高级使用文档正在准备中~~~~