我正在使用SAM(无服务器应用程序模型)在本地测试连接到云中Aurora RDS实例的Lambda函数。
使用以下命令:
sam local invoke "lambda function name" --event event.json
正在执行Lambda函数,但在返回SQL结果时,它会返回null作为输出。
如何配置Docker容器与RDS实例通信?
答案 0 :(得分:1)
如sam本地调用帮助中所述,您可以将Docker容器连接到现有Docker网络:
▶ sam local invoke --help
...
--docker-network TEXT Specifies the name or id of an existing
docker network to lambda docker containers
should connect to, along with the default
bridge network. If not specified, the Lambda
containers will only connect to the default
bridge docker network.
因此,要列出您的Docker网络:
▶ docker network ls
NETWORK ID NAME DRIVER SCOPE
25a03c8453a6 bridge bridge local
00de89cf09d0 host host local
41597d91a389 none null local
然后,将Lambda函数的Docker容器连接到主机网络:
▶ sam local invoke "lambda function name" --event event.json \
--docker-network 00de89cf09d0
请注意,您还可以使用环境变量SAM_DOCKER_NETWORK
:
▶ SAM_DOCKER_NETWORK=00de89cf09d0 sam local invoke "lambda function name" \
--event event.json
如here所述。
假设主机网络可以访问RDS实例,那应该可以解决您的问题。
答案 1 :(得分:0)
将--docker-network host
传递到sam local invoke
sam使用默认桥网络在docker容器中运行lambda / api。桥接网络访问受限。您可以创建一个可以访问RDS的自定义docker-network,也可以使用模仿您的OS网络的“主机”网络。
安装docker时,它将创建一个名为host
的网络,您可以将该网络分配给任何docker容器,并授予其对操作系统可访问的所有IP /端口的完全访问权限。