第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

相关文章

阅读更多 »

AWS Terraform 生命周期规则

介绍 基础设施即代码(IaC)在您能够完全控制资源在更新、替换和删除过程中的行为时最为强大。Terr…

Terraform 项目:简单 EC2 + 安全组

项目结构 terraform-project/ │── main.tf │── variables.tf │── outputs.tf │── providers.tf │── terraform.tfvars │── modules/ │ └── ec2/ │ ├── main.tf │ …

在 S3 中保存 Terraform 状态

配置 S3 作为 Terraform 后端 Terraform 可以将其状态存储在 S3 存储桶中。以下是一个最小的配置示例,用于设置 S3 后端:hcl terrafor...