Terraform配置DynamoDB触发Lambda的Event Source Mapping报错如何解决
问题根因
你配置的event_source_arn无效的核心原因是DynamoDB表未启用流功能。Lambda触发DynamoDB表事件的底层依赖是DynamoDB流记录的表变更数据,未开启流的情况下,aws_dynamodb_table.filenames.stream_arn返回空值或无效值,因此Lambda会抛出「无法识别事件源」的报错。
修复步骤
- 第一步:修改DynamoDB表的Terraform配置,添加流启用配置
在aws_dynamodb_table资源块中新增两个参数:stream_enabled = true:启用DynamoDB流功能stream_view_type:指定流记录的内容类型,可选值包括NEW_IMAGE(仅新写入的数据)、OLD_IMAGE(仅变更前的旧数据)、NEW_AND_OLD_IMAGES(同时包含新旧数据)、KEYS_ONLY(仅包含主键),可根据你的业务需求选择。
修改后的DynamoDB资源配置示例:
resource "aws_dynamodb_table" "filenames" { name = local.dynamodb_table_filenames billing_mode = "PROVISIONED" read_capacity = 1000 write_capacity = 1000 hash_key = "filename" # 新增流配置 stream_enabled = true stream_view_type = "NEW_IMAGE" attribute { name = "filename" type = "S" } tags = var.tags }
- 第二步:确认Lambda执行角色已配置DynamoDB流的访问权限
需要为Lambda的执行角色添加以下权限,作用范围为当前DynamoDB表的流ARN:
{ "Effect": "Allow", "Action": [ "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:ListStreams" ], "Resource": "${aws_dynamodb_table.filenames.stream_arn}" }
- 第三步:重新执行
terraform apply即可完成配置,Terraform会自动先更新DynamoDB表开启流,再创建Lambda事件源映射。
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

