You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中复用单个资源创建3个不同名称的DynamoDB表?

最优实现方式:使用Terraform for_each 批量创建资源

要避免重复代码创建同配置、仅命名不同的DynamoDB表,最简洁且易维护的方式是利用Terraform的for_each元参数,通过迭代一个表前缀集合来批量生成资源。

具体实现代码

首先定义需要创建的表前缀集合(用局部变量提升可读性):

locals {
  # 定义所有需要的表前缀
  table_prefixes = ["GB", "MN", "CH"]
}

resource "aws_dynamodb_table" "sku_color" {
  # 迭代前缀集合,为每个前缀创建一个表
  for_each      = toset(local.table_prefixes)
  
  # 动态生成表名:前缀 + 固定后缀 + 环境变量
  name          = "${each.value}_SKU_COLOR_${var.stage}"
  billing_mode  = "PAY_PER_REQUEST"
  hash_key      = "PRODUCT_ID"
  stream_enabled   = true
  stream_view_type = "NEW_AND_OLD_IMAGES"

  attribute {
    name = "PRODUCT_ID"
    type = "S"
  }
}

如果不需要局部变量,也可以直接在for_each中指定集合:

resource "aws_dynamodb_table" "sku_color" {
  for_each      = toset(["GB", "MN", "CH"])
  name          = "${each.value}_SKU_COLOR_${var.stage}"
  billing_mode  = "PAY_PER_REQUEST"
  hash_key      = "PRODUCT_ID"
  stream_enabled   = true
  stream_view_type = "NEW_AND_OLD_IMAGES"

  attribute {
    name = "PRODUCT_ID"
    type = "S"
  }
}

方案优势

  • 消除重复代码:所有表的配置只需要写一次,后续新增/删除表只需修改前缀集合
  • 资源实例清晰:每个表会生成唯一的资源标识符(如aws_dynamodb_table.sku_color["GB"]),便于单独引用或操作
  • 状态稳定:相比count依赖索引的方式,for_each使用有意义的前缀作为键,不会因为集合顺序变化导致资源意外重建
  • 符合DRY原则:遵循"不要重复自己"的编程规范,提升代码可维护性

内容的提问来源于stack exchange,提问作者ashakshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:54:43