第8天:Terraform 终于有意义了(Loops、Count、For_Each 与 Dependencies)

发布: (2025年12月3日 GMT+8 16:50)
3 min read
原文: Dev.to

Source: Dev.to

概览

今天是那种一切都恍然大悟的日子。我终于弄懂了 Terraform 的元参数——尤其是 countfor_eachdepends_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 事了。”

Back to Blog

相关文章

阅读更多 »