Skip to content

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"