1. locals
1.1 使用说明✅
类似于编程语言中的局部变量,只能在当前文件中使用。
局部值为表达式分配一个名称,因此我们可以在模块中多次使用该名称,而不是重复复制黏贴相同值。
比如:
vim locals.tf
yaml
locals {
image_id = "centos_7_9_x64_20G_alibase_20220824.vhd" # 通过local.名字调用
password = "5jejYWzSjZhWQc7G22"
}
locals {
image_id = "centos_7_9_x64_20G_alibase_20220824.vhd" # 通过local.名字调用
password = "5jejYWzSjZhWQc7G22"
}
vim main.tf
yaml
#创建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 = "cn-shanghai-b"
}
#新建安全组
resource "alicloud_security_group" "nsg1" {
security_group_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
#count = 2 # 创建2台ECS实例,默认不写count,则创建1台ECS实例
availability_zone = "cn-shanghai-b"
security_groups = ["${alicloud_security_group.nsg1.id}"]
instance_type = "ecs.e-c1m1.large" #若实例规格下线,请使用目前售卖中的实例规格
system_disk_category = "cloud_essd" #若磁盘规格下线,请使用目前售卖中的实例规格
system_disk_size = 40 # 系统盘大小,单位为GB
image_id = local.image_id
#instance_name = "lyc-test-${count.index+1}"
instance_name = "lyc-test"
vswitch_id = alicloud_vswitch.vsw_1.id
internet_max_bandwidth_out = 1 # 出网带宽,单位为Mbps
password = local.password
data_disks {
name = "data_disk1"
description = "data_disk1" # 数据盘描述
size = 20 # 数据盘大小,单位为GB
category = "cloud_essd" # 数据盘类型
}
}
#创建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 = "cn-shanghai-b"
}
#新建安全组
resource "alicloud_security_group" "nsg1" {
security_group_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
#count = 2 # 创建2台ECS实例,默认不写count,则创建1台ECS实例
availability_zone = "cn-shanghai-b"
security_groups = ["${alicloud_security_group.nsg1.id}"]
instance_type = "ecs.e-c1m1.large" #若实例规格下线,请使用目前售卖中的实例规格
system_disk_category = "cloud_essd" #若磁盘规格下线,请使用目前售卖中的实例规格
system_disk_size = 40 # 系统盘大小,单位为GB
image_id = local.image_id
#instance_name = "lyc-test-${count.index+1}"
instance_name = "lyc-test"
vswitch_id = alicloud_vswitch.vsw_1.id
internet_max_bandwidth_out = 1 # 出网带宽,单位为Mbps
password = local.password
data_disks {
name = "data_disk1"
description = "data_disk1" # 数据盘描述
size = 20 # 数据盘大小,单位为GB
category = "cloud_essd" # 数据盘类型
}
}
❌ 注意
- 局部值只能在同一模块内的代码中引用。
- 局部值可以避免多次修改同一值,提高代码的可读性。但如果过度使用,它们也会增加复杂性,所以请适度使用
- 局部值由局部块locals(复数有s)创建,但引用时本地值时省略“s"