#python #mysql #aws-lambda
#python #mysql #aws-lambda
Вопрос:
Я пишу Python lambda и пытаюсь устранить ошибку MySQL, которая возникает только при развертывании в AWS. Код отлично работает на localhost без необходимости заглушки или макетирования соединений MySQL (я тестирую его локально, комментируя заглушки и проверяя, соответствует ли реальный запрос тому, что я вижу в базе данных).
Я подтвердил, что база данных MySQL имеет белый список IP как на сетевом уровне, так и на уровне пользователя / базы данных, в котором указаны правильные IP-адреса как для локальной разработки, так и для развернутых сред. Я также подтвердил, что группа безопасности моего lambda не блокирует исходящие порты, которые могли бы вызвать такое поведение. Исходя из того, что я знаю на данный момент, это оставляет только одну возможность: что-то пошло не так в коде.
Есть ли что-нибудь в приведенном выше контексте или примерах ниже, что указывает на возможную первопричину?
import mysql.connector
def lambda_handler(event, context=None):
try:
with mysql.connector.connect(
host="database_host",
user="database_username",
password="database_password",
database="database_name",
) as mydb:
print("it worked!")
except Exception as e:
print(e)
{
"errorMessage": "2004 (HY000): Can't create TCP/IP socket (97)",
"errorType": "DatabaseError",
"stackTrace": [
" File "/var/task/src/main.py", line 70, in lambda_handlern raise en",
" File "/var/task/src/main.py", line 64, in lambda_handlern for record in data:n",
" File "/var/task/src/main.py", line 82, in get_zander_datan host=db_hostname, user=db_username, password=db_password, database=db_namen",
" File "/var/task/mysql/connector/__init__.py", line 264, in connectn return CMySQLConnection(*args, **kwargs)n",
" File "/var/task/mysql/connector/connection_cext.py", line 80, in __init__n self.connect(**kwargs)n",
" File "/var/task/mysql/connector/abstracts.py", line 966, in connectn self._open_connection()n",
" File "/var/task/mysql/connector/connection_cext.py", line 219, in _open_connectionn sqlstate=exc.sqlstate)n"
]
}
Ответ №1:
Я получил подключение для работы в сокращенном тестовом примере после удаления всех других зависимостей за пределами подключения к MySQL. Я собираюсь добавлять зависимости обратно по одной за раз, чтобы определить, какие из них виноваты, но моя текущая гипотеза — хранилище параметров AWS Systems Manager, потому что я также видел AccessDeniedException
в выходных данных журнала, и это объяснило бы это, если бы была проблема с разрешениями для хранилища параметров.
Комментарии:
1. Привет, я столкнулся с точно такой же ошибкой с вашей. Мне интересно, не могли бы вы поделиться тем, как вы решили проблему. Заранее большое вам спасибо. 🙂