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

LambdaEdge触发的Node.js函数无法写入DynamoDB问题排查

问题原因及修复方案

你的代码存在两个关键问题,导致DynamoDB数据插入失败:

1. await与回调函数混用,异步操作未被正确等待

ddb.putItem在传入回调函数时不会返回Promise,所以你写的await完全无效。Lambda函数会直接跳过写入逻辑,提前返回重定向响应——此时DynamoDB的写入操作还没完成,就被Lambda的执行环境强制终止了。

2. Lambda@Edge的权限与区域兼容性(潜在验证点)

Lambda@Edge运行在CloudFront边缘节点,而你的DynamoDB表部署在us-east-1,需要额外确认:

  • Lambda执行角色拥有dynamodb:PutItem权限,且策略明确允许访问目标表
  • 边缘环境的AWS SDK版本兼容DynamoDB的API调用(通常默认SDK版本满足需求,但需避免硬编码区域导致的解析问题)

修复后的代码

将putItem改为Promise风格调用,让await能正确等待写入完成:

var AWS = require("aws-sdk");
var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10', region: 'us-east-1'});

exports.handler = async (event, context) => {
    var params = {
        TableName: 'MYTABLE',
        Item: {
          'id' : {'S': 'something'},
          'value' : {'S': 'something'}
        }
    };
      
    try {
        // 使用promise()方法转为Promise调用,确保await等待执行完成
        const data = await ddb.putItem(params).promise();
        console.log("Success", data);
    } catch (err) {
        console.log("Error", err);
        // 可根据需求添加错误处理逻辑,比如记录日志后继续重定向
    }

    const response = {
        status: '302',
        statusDescription: 'Found',
        headers: {
            location: [{
                key: 'Location',
                value: 'https://www.google.com',
            }],
        },
    };
    return response;
};

额外检查项

  • 查看Lambda@Edge的CloudWatch日志(需切换到边缘节点对应的区域日志组),确认是否有DynamoDB的权限或网络错误信息
  • 验证Lambda执行角色的权限策略,确保包含以下规则:
{
    "Effect": "Allow",
    "Action": "dynamodb:PutItem",
    "Resource": "arn:aws:dynamodb:us-east-1:你的AWS账号ID:table/MYTABLE"
}

内容的提问来源于stack exchange,提问作者Thomas Carlton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:40:15