如何编写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
相关产品推荐
相关产品推荐

