Ошибка MySQL от AWS Python Lambda Client (2004 (HY000): не удается создать сокет TCP / IP (97))

#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. Привет, я столкнулся с точно такой же ошибкой с вашей. Мне интересно, не могли бы вы поделиться тем, как вы решили проблему. Заранее большое вам спасибо. 🙂