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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:15:03