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。但是,这些都不适合我。
SAM Local工具在Docker容器中运行Lambda函数。localhost不会从容器内部解析为主机IP。
如果您使用的是Mac的Docker,则可以使用特殊的DNS名称docker.for.mac.localhost作为数据库主机。
在其他操作系统上,您可以在docker0网络接口中查找主机的IP,并将其用作数据库主机。例如,请参见:从Docker容器内部,如何连接到计算机的本地主机?
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |