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

使用SAM的Lambda函数无法连接本地DynamoDB 求助排查

解决SAM本地Lambda无法连接DynamoDB Local的问题

问题根源

用SAM本地运行Lambda时,Lambda是在Docker容器内执行的。你代码里配置的http://localhost:8000指向的是Lambda容器自身的localhost,而非运行DynamoDB Local的宿主机,因此出现连接失败的错误。

解决方案

1. 修改DynamoDB端点配置

将Lambda代码中的DynamoDB端点指向宿主机的可访问地址:

  • Windows/macOS(Docker Desktop环境):用host.docker.internal,这是Docker提供的特殊域名,会自动解析到宿主机IP。
  • Linux环境:直接使用宿主机的实际IP地址(比如192.168.1.100这类局域网IP),或者配置Docker使用host网络模式。

修改Lambda代码

建议通过环境变量读取端点,保持配置灵活性:

import AWS from 'aws-sdk';
import bcrypt from 'bcrypt';

export const lambdaHandler = async (event, context) => {
    const dynamoDB = new AWS.DynamoDB.DocumentClient({
        region: 'localhost',
        endpoint: process.env.DYNAMODB_LOCAL_ENDPOINT // 从环境变量获取端点
    });
    
    const params = {
        TableName: process.env.TABLE_NAME,
        Select: 'COUNT',
    };
    const result = await dynamoDB.scan(params).promise();
    return result
}

更新SAM模板的环境变量

把DYNAMODB_LOCAL_ENDPOINT的值替换为宿主机可访问地址:

Environment:
  Variables:
    TABLE_NAME: "User"
    DYNAMODB_LOCAL_ENDPOINT: http://host.docker.internal:8000 # Windows/macOS环境用这个
    # DYNAMODB_LOCAL_ENDPOINT: http://192.168.1.100:8000 # Linux环境替换为你的宿主机IP

2. 验证连接

重启SAM本地服务后重新测试:

  • 停止当前SAM服务:按Ctrl+C
  • 重新启动:执行sam local start-api(或用sam local invoke直接调用函数)

额外检查

  • 确认DynamoDB Local仍在运行,端口8000未被其他程序占用
  • 你的IAM角色资源ARN配置正确(arn:aws:dynamodb:localhost:localhost:table/User符合DynamoDB Local的格式要求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:04:55