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

使用SAM时如何让Lambda连接Mac本地localhost的数据库?

SAM本地Lambda连接Mac本地端口转发数据库的解决方法

问题概述

Lambda与RDS同属VPC,开发仅能通过Bastion实例访问RDS。SAM本地测试无数据库依赖的API正常,但依赖数据库的API无法直接访问Gamma环境RDS。已通过SSM代理在Bastion上完成端口转发,Mac本地127.0.0.1:3306可正常连接数据库,但Lambda容器内访问该地址报Connection refused,使用host.docker.internal:3306报Name or service not known。

解决方案

方案1:让Lambda容器使用Mac主机网络

SAM默认创建独立Docker网络,若让Lambda容器直接复用Mac的网络栈(仅支持Mac/Linux),可直接访问本地转发端口:

  • 临时运行:执行SAM命令时添加--docker-network host参数
    # 调用单个Lambda函数
    sam local invoke --docker-network host YourLambdaFunction
    # 启动本地API网关
    sam local start-api --docker-network host
    
  • 持久化配置:在项目根目录sam.toml中添加全局配置
    [default.parameters]
    docker_network = "host"
    
    配置完成后,Lambda代码中直接连接127.0.0.1:3306即可访问Mac本地转发的数据库。

方案2:自定义Docker网络并配置host.docker.internal解析

若不想使用主机网络,可手动创建Docker网桥并指定主机映射:

  1. 创建自定义Docker网络
    docker network create sam-local-network --driver bridge --subnet 192.168.0.0/16
    
  2. 运行SAM时指定该网络,并添加主机映射参数
    sam local invoke YourLambdaFunction --docker-network sam-local-network --add-host host.docker.internal:host-gateway
    
    此时Lambda代码中使用host.docker.internal:3306即可连接Mac本地的转发端口。

方案3:本地数据库镜像替代测试

若Gamma环境数据库结构可复刻,可在本地启动同版本数据库镜像,导入Gamma数据后直接测试:

  1. 启动本地MySQL镜像(示例)
    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword mysql:8.0
    
  2. 修改Lambda数据库连接配置,指向host.docker.internal:3306(或用方案1的主机网络连接127.0.0.1:3306)

注意事项

  • 使用主机网络时,Lambda容器会共享Mac的端口资源,需注意端口冲突
  • host-gateway参数要求Docker版本≥20.10,请确保本地Docker版本符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:11:16