У меня есть функция AWS Lambda, которая успешно запускается через HTTP-запрос к шлюзу API. Он возвращает ответ JSON, который я вижу в своем локальном веб-браузере.
Теперь я хочу, чтобы он собирал данные из базы данных MySQL Aurora Serverless, которую я настроил. Я могу получить доступ к этой базе данных из среды Cloud 9. Я могу импортировать свою лямбда-функцию в Cloud 9 и выбрать «запускать локально», и она успешно подключается к базе данных и выполняет SQL-запросы.
Однако, когда я запускаю функцию Lambda из шлюза API, pymysql.connect завершается с ошибкой, вызывая OperationalError с сообщением «Не удается подключиться к серверу MySQL на 'testdb.cluster-xxxxx.us-east-1.rds.amazonaws. com ".
Я следил Учебное пособие: настройка лямбда-функции для доступа к Amazon RDS в Amazon VPC и выполнил эти шаги:
я прочитал Использование Amazon Aurora Serverless в котором говорится, что «Вы можете получить доступ к кластеру БД Aurora без сервера из AWS Lambda», и направляет меня на Настройка лямбда-функции для доступа к ресурсам в Amazon VPC. После этого я выполнил следующие шаги:
В этом документе также говорится: «Когда вы добавляете конфигурацию VPC в функцию Lambda, она может получить доступ только к ресурсам в этом VPC. Если функции Lambda требуется доступ как к ресурсам VPC, так и к общедоступному Интернету, VPC должен иметь преобразование сетевых адресов ( NAT) внутри VPC ". Поэтому я прочитал Как я могу предоставить доступ в Интернет для моей функции VPC Lambda? и выполнил эти шаги:
Теперь я считаю, что моя функция Lambda работает в VPC, и я могу успешно запустить ее с помощью шлюза API и увидеть ее ответ JSON. Однако он по-прежнему не может подключиться к базе данных MySQL.
Какие дальнейшие шаги необходимы, чтобы функция Lambda могла подключиться к базе данных?
Недостающий шаг:
Поскольку функция Lambda запускается на компьютере в другой подсети от кластера базы данных, хотя он находится в том же VPC, группу безопасности все же необходимо настроить, чтобы разрешить входящее соединение с базой данных из этого источника.
Я думаю, что вопрос и этот ответ теперь предоставляют полные шаги по настройке общедоступной функции Lambda с доступом к кластеру базы данных Aurora Serverless, но, возможно, другие ответы могут улучшить эти инструкции. Может быть более краткий способ описания конфигурации или более легко воспроизводимый метод, например, с использованием инструментов командной строки вместо веб-консолей.