Terraform快速入门
1.入门案例准备
- 拥有阿里云账号且余额大于100RB
- 开通AK/SK,并且具有完全访问管理权限
- 安装Terraform,
https://www.terraform.io/
2.案例代码
Terraform的配置文件以.tf为后缀,例如main.tf等
#定义云厂商
provider "alicloud" {
region = "cn-shanghai"
access_key = "xxxx" #修改成自己的ak
secret_key = "xxx" #修改成自己的sk
}
#创建vpc
resource "alicloud_vpc" "vpc" {
vpc_name = "vpc_1"
cidr_block = "10.0.0.0/16"
}
# 创建vswitch
# alicloud_vswitch是阿里云的资源字段,vsw_1字段是tf文件中的自定义唯一资源名称,vswitch_name字段是在阿里云上的自定义备注名
resource "alicloud_vswitch" "vsw_1" {
vswitch_name = "vsw_aliyun1"
vpc_id = alicloud_vpc.vpc.id
cidr_block = "10.0.0.0/24"
zone_id = var.region
}
#新建安全组
resource "alicloud_security_group" "nsg1" {
name = "lyc_aliyun_nsg1"
vpc_id = alicloud_vpc.vpc.id
}
#将nsg_rule1、nsg_rule2加入安全组lyc_aliyun_nsg1中
resource "alicloud_security_group_rule" "nsg_rule1" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "1/65535"
priority = 1
security_group_id = alicloud_security_group.nsg1.id
cidr_ip = "0.0.0.0/0"
}
#创建ECS实例
resource "alicloud_instance" "instance" {
# cn-shanghai
availability_zone = var.region
security_groups = ["${alicloud_security_group.nsg1.id}"]
instance_type = "ecs.n1.small"
system_disk_category = "cloud_ssd"
image_id = "centos_7_9_x64_20G_alibase_20220824.vhd"
instance_name = "lyc-kevin"
vswitch_id = alicloud_vswitch.vsw_1.id
internet_max_bandwidth_out = 1
password = "5jejYWzSjZhWQc7G22"
}
上述案例首先定义了云厂商, Provider 可以理解为各个云厂商提供的与云资源交互的后端驱动,不同的基础设施提供商都需要提供一个Provider来实现对自家基础设施的统一管理,例如我们熟知的 Azure,AWS,GCP,Kubernetes,Aliyun等等
2.1语法
在文件中除了定义provider之后,还需要配置一些资源,例如VPC、交换机、安全组以及定义实例等
resource "azurerm_resource_group" "example" {
name = "Web_Test_TF_RG"
location = "East Asia"
}
其中azurerm_resource_group为创建的资源类型,这个可以在Terraform提供的文档中查找(alicloud|docs),example是定义的资源名称。中括号里面的参数也是Terrform提供的文档中可以查看属性。
2.2 Terraform状态管理
执行Terraform apply命令后,会在Terraform文件下生成terraform.tfstate和terraform.tfstate.lock.info的文件
- terraform.tfstate文件:记录Terraform执行apply后的部署状态信息。
- terraform.tfstate.lock.info文件:字面理解就是加锁,保证安全性。
- 其中terraform.tfstate.backup文件:记录上一次的执行情况
3.变量
Terraform允许用户定义输入变量、输出变量。变量语法:
varible "NAME" {
[CONFIG ...]
}
变量声明包含三个参数:
- description:描述参数的使用说明
- default:设置默认值,如果在配置或者命令行中设置了参数的值,那么会使用参数的值,如果没有设置那么会使用默认的值。这里如果在命令行:terraform plan -var “NAME” =“属性值”
- type: 对用户输入的变量类型强制约束,包括string、number、bool、list、map、set、等类型。如果输入的属性值与设定的类型不匹配,则会报错。
输出变量output:
output "<NAME>" {
value = <VALUE>
[CONFIG]
}
包含value属性和其他的属性,比如description属性,用于对属性进行说明。
一般在执行apply才会显示输出的变量内容。
可直接使用命令terraform output NAME直接查看变量内容