我正在尝试通过 AWS lambda 函数连接到 MYSQL 的本地实例。 我有什么遗漏的吗?我希望任何访问 API 端点的人都能触发此 lambda 函数,并向他们显示数据库中的所有条目。如果我做错了什么,请告诉我!
这是我的 Lambda 函数
import pymysql
import json
# TO zzip code all up after it is finished, Use
# zip -r9 ${PWD}/function.zip
# Lambda Permissions:
# AWSLambdaVPCAccessExecutionRole
# Config values
endpoint = 'localhost'
username = 'root'
password = ''
database_name = 'test'
# Connection
conn = pymysql.connect(host=endpoint, user=username,
passwd=password, db=database_name)
def lambda_handler(event, context):
cursor = conn.cursor()
cursor.execute('SELECT * from i5')
rows = cursor.fetchall()
# 2. Construct body of the response object
transactionResponse = {}
transactionResponse['message'] = 'Hello From Jareds lambda function'
transactionResponse['tickets'] = json.dumps(rows)
# 3. Construct HTTP response object
responseObject = {}
responseObject['statusCode'] = 200
responseObject['headers'] = {}
responseObject['headers']['Content-Type'] = 'application/json'
responseObject['body'] = json.dumps(transactionResponse)
return responseObject
来自cloudwatch的错误
[ERROR] OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 97] Address family not supported by protocol)")
File "/var/task/handler.py", line 18, in <module>
passwd=password, db=database_name)
File "/var/task/pymysql/connections.py", line 353, in __init__
self.connect()
File "/var/task/pymysql/connections.py", line 664, in connect
raise exc
localhost
解析为本地计算机。 AWS Lambda 函数在 Amazon 数据中心内的某些托管服务器环境中运行。在 Lambda 环境中,localhost
将解析到该服务器(或者实际上是 Lambda 函数所在的 Docker 容器)。当您触发 Lambda 函数调用时,该代码并未在您的本地计算机上运行,因此它无法连接到地址 localhost
处的本地数据库。
您必须在互联网上公开您的本地数据库,并通过 Lambda 函数从您的公共 IP 地址访问它。我不建议实际这样做,除非您了解在互联网上公开数据库的安全影响并了解如何相应地保护它。