Terraform配置DynamoDB触发Lambda报Unrecognized event source错误如何解决
问题根因与解决方法
核心问题
你遇到的Unrecognized event source报错90%以上的场景是 DynamoDB表未启用流(Stream),Lambda事件源映射必须绑定DynamoDB的流ARN,未开流的情况下stream_arn属性为空值,自然无法识别事件源。
排查&解决步骤
1、给DynamoDB表启用流配置
在你的aws_dynamodb_table资源中添加流相关参数,根据你的业务需求选择流视图类型: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 # 可选值:NEW_IMAGE/OLD_IMAGE/NEW_AND_OLD_IMAGES/KEYS_ONLY,只需要新写入内容选NEW_IMAGE即可 stream_view_type = "NEW_IMAGE" attribute { name = "filename" type = "S" } tags = var.tags }配置完成后执行
terraform apply,确认stream_arn已经生成有效值,不要把stream_arn换成表本身的arn,事件源映射只能识别流ARN。2、检查Lambda执行角色的权限
Lambda需要具备读取DynamoDB流的权限,给Lambda的执行角色附加如下权限策略:resource "aws_iam_role_policy" "lambda_dynamodb_stream_access" { name = "lambda-dynamodb-stream-access" role = aws_lambda_function.trigger_stepfunction_lambda.role policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = [ "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:ListStreams" ] Effect = "Allow" Resource = aws_dynamodb_table.filenames.stream_arn } ] }) }3、其他排查点
如果完成以上两步还是报错:- 执行
terraform state show aws_dynamodb_table.filenames确认stream_arn属性有有效值 - 升级AWS Terraform Provider到最新稳定版,老旧版本可能存在流ARN识别的兼容问题
- 执行
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

