Terraform调用DynamoDB模块报错:无法获取name和arn属性求助
Terraform报错:module.test_table不存在name和arn属性的排查方案
问题核心
你调用的dynamodb模块没有对外暴露name和arn这两个输出属性,导致外部代码无法直接引用module.test_table.name和module.test_table.arn,触发了Terraform的属性不存在错误。
排查与解决步骤
检查模块内部的输出定义
打开你引用的git@github.com:test/terraform-modules.git//dynamodb模块目录,查看其中的outputs.tf文件:- 如果文件里没有
name和arn的输出,需要在模块中添加以下内容(替换your_table_name为模块内实际的DynamoDB表资源名称):output "name" { value = aws_dynamodb_table.your_table_name.name description = "DynamoDB表的名称" } output "arn" { value = aws_dynamodb_table.your_table_name.arn description = "DynamoDB表的ARN" } - 如果模块已有输出,但属性名不是
name/arn(比如叫table_name/table_arn),需要修改你代码中的引用,匹配模块实际输出的属性名。
- 如果文件里没有
锁定模块版本
如果引用的是Git模块,默认拉取的是默认分支的最新代码,若分支近期变更移除了输出属性,需指定固定的tag或commit来引用稳定版本:module "test_table" { source = "git@github.com:test/terraform-modules.git//dynamodb?ref=v1.0.0" # 替换为实际的tag或commit hash # 其余参数保持不变 }临时替代方案(不推荐,破坏模块封装)
如果暂时无法修改模块代码,可以通过数据源直接查询DynamoDB表的信息:data "aws_dynamodb_table" "test_table" { name = "dynamo-${local.environment}" # 与你传给模块的name参数一致 provider = aws.east } resource "aws_ssm_parameter" "table_name" { provider = aws.east name = "${local.prefix}/new/table-name" type = "String" value = data.aws_dynamodb_table.test_table.name } resource "aws_ssm_parameter" "table_arn" { provider = aws.east name = "${local.prefix}/new/table-arn" type = "String" value = data.aws_dynamodb_table.test_table.arn }
内容的提问来源于stack exchange,提问作者learner00
相关产品推荐
相关产品推荐

