#python #database #amazon-web-services #aws-lambda #pymysql
#python #База данных #amazon-веб-сервисы #aws-lambda #pymysql
Вопрос:
Я пытаюсь подключиться к локальному экземпляру MYSQL с помощью лямбда-функций AWS. Есть ли что-то, чего мне не хватает? Я хочу, чтобы любой, кто обращается к конечной точке API, запускал эту лямбда-функцию и показывал им все записи в базе данных. Пожалуйста, дайте мне знать, если я делаю что-то не так!
Это моя лямбда-функция
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
Комментарии:
1. На вашем локальном ноутбуке / ПК запущен MySQL, и вы хотите, чтобы AWS Lambda подключалась к этой базе данных?
2. Если вы хотите подключиться к базе данных из Lambda — вам следует рассмотреть возможность использования экземпляра Amazon RDS.
Ответ №1:
localhost
выполняется на локальном компьютере. Функции AWS Lambda выполняются в некоторой управляемой серверной среде внутри центра обработки данных Amazon. В среде Lambda localhost
будет выполняться разрешение на этот сервер (или, фактически, контейнер Docker, в котором находится лямбда-функция). Когда вы запускаете вызов лямбда-функции, этот код не выполняется на вашем локальном компьютере, так как же он будет подключаться к вашей локальной базе данных?