第8天:Terraform 终于有意义了(Loops、Count、For_Each 与 Dependencies)
Source: Dev.to
概览
今天是那种一切都恍然大悟的日子。我终于弄懂了 Terraform 的元参数——尤其是 count、for_each 和 depends_on。经过一些动手实践,那些曾经看起来很吓人的概念原来既简单又强大。
使用 count
count 非常适合遍历列表。在下面的示例中,通过变量提供了一组 bucket 名称,使用 count.index 来创建两个 S3 bucket:
resource "aws_s3_bucket" "bucket5" {
count = 2
bucket = var.bucket_name[count.index]
tags = var.tags
}
运行典型的 Terraform 工作流:
terraform plan
terraform apply --auto-approve
terraform output
即可得到预期的资源,过程顺畅。
使用 for_each
当需要唯一的资源名称时,for_each 与集合配合使用更为简洁。下面的代码片段演示了使用集合创建另外两个 S3 bucket,并通过 each.value 引用每个 bucket 名称:
resource "aws_s3_bucket" "bucket_set" {
for_each = var.bucket_set # a set of bucket names
bucket = each.value
tags = var.tags
}
使用 depends_on 管理依赖
显式依赖可以确保 Terraform 不会以错误的顺序创建资源。添加 depends_on 可以保证某个资源在另一个资源完全创建后才开始执行:
resource "aws_s3_bucket" "dependent_bucket" {
bucket = "my-dependent-bucket"
depends_on = [
aws_s3_bucket.bucket5
]
}
使用 For‑Expressions 输出整洁结果
For‑expressions 能让输出值更简洁、易读。下面的示例收集了使用 count 创建的所有 bucket 的名称:
output "s3_bucket_names" {
value = [for bucket in aws_s3_bucket.bucket5 : bucket.bucket]
}
输出的是一个整齐的 bucket 名称列表,便于下游使用。
收获
count– 适用于遍历有序列表。for_each– 当需要唯一标识符时更简洁,尤其是配合集合使用。depends_on– 防止 Terraform 资源出现错序应用。- For‑expressions – 生成整洁、专业的输出。
我对 Terraform 的练习越多,就越有信心从事 DevOps 工作。 “好吧…我真的可以做这件 DevOps 事了。”