Sam Local内的mysql数据库连接

Tin*_*mar 2 python mysql aws-sam-cli

我正在尝试为无服务器架构进行本地开发设置。亚马逊为此提供了SAM Local Beta。但是在我的项目中,我们正在使用mysql数据库。我试图建立到我的本地mysql服务器的连接,但失败了。

module initialization error:
(2003, "Can't connect to MySQL server on 'localhost'
([Errno 99] Cannot assign requested address)")
Run Code Online (Sandbox Code Playgroud)

以下是我的python代码:

import json
import pymysql


def lambda_sandbox_down_handler(event, context):
    rds_host = 'localhost'
    name = 'localhost'
    password = 'localhost'
    db_name = 'localhost'
    conn = pymysql.connect(rds_host,port=3306, user=name, passwd=password,
                           db=db_name,charset='utf8mb4',connect_timeout=5)
    return conn
Run Code Online (Sandbox Code Playgroud)

我能够使用命令行以及pycharm建立连接。

我的问题是这可能在SAM本地中。

我已经安装了mysql的docker镜像并启动了它。在此之后,我仍然遇到相同的错误。

Jac*_*ack 15

我可以在 Ubuntu 19.04 上验证,--docker-network host作为参数传递来sam local invoke为我解决问题。

例子:

sam local invoke MyLambdaFunction --event sample-event.json --docker-network host

一些帖子报告说使用host.docker.internal而不是localhost应该工作。另一个建议是使用 docker0 地址(ip addr show在 linux 上查找它)。这通常是 172.17.0.1。但是,这些都不适合我。


kal*_*mas 6

SAM Local工具在Docker容器中运行Lambda函数。localhost不会从容器内部解析为主机IP。

如果您使用的是Mac的Docker,则可以使用特殊的DNS名称docker.for.mac.localhost作为数据库主机。

在其他操作系统上,您可以在docker0网络接口中查找主机的IP,并将其用作数据库主机。例如,请参见:从Docker容器内部,如何连接到计算机的本地主机?