Terraform:有什么方法可以为 apply/destroy 对目标(资源)进行分组吗?
Terraform: Is there any way to group targets (resources) for apply/destroy?
在 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
在您的示例中,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
将像一个包含两个资源的组一样用于您的存储桶。
根据评论更新
要“分组”不同类型的资源,您可以使用 terraform modules。
在 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
在您的示例中,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
将像一个包含两个资源的组一样用于您的存储桶。
根据评论更新
要“分组”不同类型的资源,您可以使用 terraform modules。