Terraform: Is there any way to group targets (resources) for apply/destroy?

Viewed 65

What better way to group resources in terraform?

For example I have two S3 buckets:

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
  }
}

What better way to group these two buckets?

Something like:

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 = ...
}

And will be able to run:

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

There are no special group resource in terraform as in your example, but you for what you described, a regular for_each could be used.

For example:


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
  }
}

Then, the resulting aws_s3_bucket.name will behave like a group containing two resources for your buckets.

Update based on comments

To "group" resources of different types, you can use terraform modules.

Related