Terraform:是否可以将目标(资源)分组以进行应用/销毁?

时间:2020-10-27 02:00:14

标签: amazon-web-services terraform terraform-provider-aws

有什么更好的方式在Terraform中对资源进行分组?

例如,我有两个S3存储桶:

resource "aws_s3_bucket" "name1" {
  provider = aws.provider
  bucket = "name1"
  acl    = "private"

  force_destroy = true

  versioning {
    enabled = false
  }
}
resource "aws_s3_bucket" "name2" {
  provider = aws.provider
  bucket = "name2"
  acl    = "private"

  force_destroy = true

  versioning {
    enabled = false
  }
}

将这两个存储桶分组的更好的方法是什么?

类似的东西:

resource "some_terraform_resource_group" "group_name" {
  ? depends_on = ... ?
  resources_in_group = [
   aws_s3_bucket.name1,
   aws_s3_bucket.name2
  ]
  provider = aws.provider
  some_others options = ...
}

并且可以运行:

terraform apply -target=some_terraform_resource_group.group_name
terraform destroy -target=some_terraform_resource_group.group_name

1 个答案:

答案 0 :(得分:1)

在您的示例中,terraform中没有特殊的组资源,但是根据您的描述,可以使用常规的for_each

例如:


variable "bucket_names" {
   default = ["name1", "name2"]
}


resource "aws_s3_bucket" "name" {
 
  for_each = toset(var.bucket_names)

  provider = aws.provider
  bucket = each.value
  acl    = "private"

  force_destroy = true

  versioning {
    enabled = false
  }
}

然后,生成的aws_s3_bucket.name的行为类似于包含两个存储桶资源的组。

根据评论进行更新

要对不同类型的资源进行“分组”,可以使用地形modules