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

如何编写Terraform代码创建含初始值的DynamoDB表?

DynamoDB表Terraform配置问题解决

初始数据结构

需要创建的表初始条目JSON结构如下:

{
  "voter": {
    "S": "count"
  },
  "a": {
    "N": "0"
  },
  "b": {
    "N": "0"
  }
}

控制台表结构说明

从截图可见,该表的主键为字符串类型的voter,同时包含两个数值类型属性a和b,初始值均为0。

现有Terraform代码

resource "aws_dynamodb_table" "dynamodb_table_votes" {
  name           = "Votes"
  billing_mode   = "PAY_PER_REQUEST"
  #range_key      = "voter"
  #hash_key = ......

  stream_enabled   = true
  stream_view_type = "NEW_AND_OLD_IMAGES"

  dynamodb_attributes {
    name = "voter"
    type = "S"
  }

  attribute {
    name = "a"
    type = "N"
  }

  attribute {
    name = "b"
    type = "N"
  }

}

修正后的配置方案

1. 表结构配置(hash_key/attributes)

  • voter作为唯一主键,设置为hash_key,无需配置range_key
  • 统一使用attribute块定义所有属性(包括主键),dynamodb_attributes是旧版语法,建议替换

2. 插入初始数据

Terraform的aws_dynamodb_table仅负责创建表结构,需通过aws_dynamodb_item资源插入初始条目。

完整代码如下:

# 创建DynamoDB表
resource "aws_dynamodb_table" "dynamodb_table_votes" {
  name           = "Votes"
  billing_mode   = "PAY_PER_REQUEST"
  hash_key       = "voter" # 设置voter为哈希主键

  stream_enabled   = true
  stream_view_type = "NEW_AND_OLD_IMAGES"

  # 定义所有属性,包括主键
  attribute {
    name = "voter"
    type = "S"
  }

  attribute {
    name = "a"
    type = "N"
  }

  attribute {
    name = "b"
    type = "N"
  }
}

# 插入初始数据条目
resource "aws_dynamodb_item" "initial_vote_count" {
  table_name = aws_dynamodb_table.dynamodb_table_votes.name
  hash_key   = aws_dynamodb_table.dynamodb_table_votes.hash_key

  item = jsonencode({
    "voter" = { "S" = "count" }
    "a"     = { "N" = "0" }
    "b"     = { "N" = "0" }
  })
}

说明

  • 哈希主键hash_key设置为voter,与初始数据中的主键对应
  • 所有属性通过attribute块声明,保证表结构正确
  • 使用aws_dynamodb_item插入初始数据,通过jsonencode格式化DynamoDB所需的属性格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:10:23