depends_on 可以显式声明资源间由 Terraform 无法自动推导出的隐含依赖关系。适用于仅当资源间确实存在依赖关系,但彼此间没有数据引用的场景。例如:variable "availability_zone" {default = "ap-guangzhou-6"}resource "tencentcloud_vpc" "vpc" {name = "guagua_vpc_instance_test"cidr_block = "10.0.0.0/16"}resource "tencentcloud_subnet" "subnet" {depends_on = [tencentcloud_vpc.vpc]availability_zone = var.availability_zonename = "guagua_vpc_subnet_test"vpc_id = tencentcloud_vpc.vpc.idcidr_block = "10.0.20.0/28"is_multicast = false}
count 参数可以是任意自然数,Terraform 会创建 count 个资源实例,每一个实例都对应一个独立的基础设施对象,并且在执行 Terraform 代码时,这些对象是被分别创建、更新或者销毁的。例如:resource "tencentcloud_instance" "foo" {availability_zone = var.availability_zoneinstance_name = "terraform-testing"image_id = "img-ix05e4px"...count = 3tags = {Name = "Server ${count.index}"}...
<TYPE>.<NAME>[<INDEX>] (例如:tencentcloud_instance.foo[0],tencentcloud_instance.foo[1])for_each是 Terraform 0.12.6 引入的新特性。一个 resource 块不允许同时声明 count 与 for_each。for_each 参数可以是一个 map 或是一个 set(string),Terraform 会为集合中每一个元素都创建一个独立的基础设施资源对象,并且和 count 一样,每一个基础设施资源对象在执行 Terraform 代码时都是独立创建、修改、销毁的。例如:resource "tencentcloud_cfs_access_group" "foo" {for_each = {test1_access_group = "test1"test2_access_group = "test2"}name = each.keydescription = each.value}
resource "tencentcloud_eip" "foo" {for_each = toset(["awesome_gateway_ip1", "awesome_gateway_ip2"])name = "awesome_gateway_ip"}
provider "tencentcloud" {region = "ap-guangzhou"# secret_id = "my-secret-id"# secret_key = "my-secret-key"}provider "tencentcloud" {alias = "tencentcloud-beijing"region = "ap-beijing"# secret_id = "my-secret-id"# secret_key = "my-secret-key"}resource "tencentcloud_vpc" "foo" {name = "ci-temp-test-updated"cidr_block = "10.0.0.0/16"dns_servers = ["119.29.29.29", "8.8.8.8"]is_multicast = falsetags = {"test" = "test"}provider = tencentcloud.tencentcloud-beijing}
lifecycle 块可指定一个不同的行为方式。Terraform 支持如下几种 lifecycle:create_before_destroy 参数可以修改这个行为,使 Terraform 首先创建新对象,只有在新对象成功创建并取代老对象后再销毁老对象。例如:lifecycle { create_before_destroy = true}
prevent_destroy 参数是一个保险措施,只要它被设置为 true 时,Terraform 会拒绝执行任何可能会销毁该基础设施资源的变更计划。prevent_destroy 参数可以预防意外删除关键资源,例如错误地执行了 terraform destroy,或者是意外修改了资源的某个参数,导致 Terraform 决定删除并重建新的资源实例。prevent_destroy = true 会导致无法执行 terraform destroy。例如: lifecycle {prevent_destroy = true}
prevent_destroy 参数,需要注意的是,该措施无法防止在删除 resource 块后 Terraform 删除相关资源,因对应的 prevent_destroy = true 声明也被一并删除了。ignore_changes 来指示 Terraform 忽略某些属性的变更。ignore_changes 的值定义了一组在创建时需要按照代码定义的值来创建,但在更新时不需要考虑值的变化的属性名。例如:resource "tencentcloud_instance" "foo" {...lifecycle {ignore_changes = [# Ignore changes to tags, e.g. because a management agent# updates these based on some ruleset managed elsewhere.tags,]}
name = expression 的形式进行一对一的赋值。一般情况下均可使用该赋值形式,但当某些资源类型包含了可重复的内嵌块时,无法使用表达式循环赋值。例如:resource "tencentcloud_tcr_instance" "foo" {name = "example"instance_type = "basic"open_public_operation = truesecurity_policy {cidr_block = "10.0.0.1/24"}security_policy {cidr_block = "192.168.1.1/24"}}
resource "tencentcloud_tcr_instance" "foo" {name = "example"instance_type = "basic"open_public_operation = truedynamic "security_policy" {for_each = toset(["10.0.0.1/24", "192.168.1.1/24"])content {cidr_block = security_policy.value}}}
dynamic 可以在 resource、data、provider 和 provisioner 块内使用。dynamic 块类似于 for 表达式,它产生的是内嵌块,可以迭代一个复杂类型数据并为每一个元素生成相应的内嵌块。在上述示例中:for_each 参数:iterator 变量(上述示例中的 setting)具备以下属性:文档反馈