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

AWS SAM本地调用Lambda连本地DynamoDB报UnrecognizedClientException如何解决

问题修复方案

错误原因

你遇到的UnrecognizedClientException报错由两个配置缺失导致:

  • Lambda代码中DynamoDB客户端默认指向AWS线上服务,没有指定本地DynamoDB的访问端点,请求线上服务时会校验AWS凭证有效性,因此报错
  • 本地运行的DynamoDB容器不需要真实AWS密钥,但你没有配置本地测试场景下的占位密钥

具体修复步骤

  1. 修改Lambda代码,适配本地测试场景
    新增本地环境判断逻辑,SAM本地调用时会自动注入AWS_SAM_LOCAL=true的环境变量,用该变量区分本地/线上环境,修改后的代码如下:
var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});

exports.lambdaHandler = async (event, context) => {
    // 区分本地/线上环境
    const isLocal = process.env.AWS_SAM_LOCAL === 'true';
    const dynamoConfig = {};
    if (isLocal) {
        // 同Docker网络下通过容器名访问本地DynamoDB,无需使用localhost
        dynamoConfig.endpoint = 'http://users:8000';
        // 本地DynamoDB不校验密钥,随意填写占位即可
        dynamoConfig.accessKeyId = 'testId';
        dynamoConfig.secretAccessKey = 'testKey';
    }
    const dynamoDB = new AWS.DynamoDB.DocumentClient(dynamoConfig);

    const params = {
        TableName: 'employees',
        Key: {
            name: "naxi"
        }
    };

    const result = await dynamoDB.get(params).promise();
    if (result.Item) {
        return result.Item;
    } else {
        return { error: 'Task not found.' };
    }
};
  1. 无需额外修改SAM调用命令,直接执行原有命令即可:
sam local invoke <lambdaFunctionName> --docker-network lambda-local

额外注意事项

你之前验证DynamoDB运行状态的命令存在拼写错误,localhsot需改为localhost,该错误不影响Lambda调用逻辑,仅手动验证时需要修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:09:01