невозможно подключиться к экземпляру AWS RDS в VPC по умолчанию из AWS Lambda

0

У меня есть экземпляр mysql RDS

  1. его присвоено по умолчанию VPC для всех подсетей по умолчанию

  2. имеет группу безопасности, входящее правило, установленное для прослушивания всего трафика, всего протокола, всех диапазонов портов и источника 0.0.0.0/0

  3. Доступно для общего доступа значение Истина

Я могу подключиться к RDS из SQl Workbench, а также из локального скрипта python

-In моя лямбда-функция python -

  1. назначили роль с AWSLambdaVPCAccessExecutionRole, lambda_basic_execution

    2.Lambda не назначается ни одному VPC

Я получаю следующее сообщение об ошибке из lambda "errorMessage": "RequestId: xx Процесс завершен до завершения запроса"

Код завершается с ошибкой в точке, где он пытается подключиться к БД get_database_connection(), и кроме журнала logging.logger logger.error("ОШИБКА: Неожиданная ошибка: Не удалось подключиться к экземпляру MySql.")

Возможно ли, что lambda может подключаться к экземпляру RDS по умолчанию VPC? lambda не назначается ни одному VPC

Лямбда-код

import sys
import logging
import package.pymysql
import logging
import package.pymysql.cursors

DATABASE_HOST = 'XXX'
DATABASE_USER = 'XXX'
DATABASE_PASSWORD = 'XXX'
DATABASE_DB_NAME = 'XXX'
port = 3306

def get_database_connection():
    "Build a database connection"
    conn = pymysql.connect(DATABASE_HOST, user=DATABASE_USER,
                           passwd=DATABASE_PASSWORD, db=DATABASE_DB_NAME, connect_timeout=5)
    return conn

try:
    conn = get_database_connection() 
except:
    logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
    sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")    

def lambda_handler(event, context):
    print("Lambda executed")

по этой ссылке [ https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html][1]

  • 0
    Возможный дубликат AWS Lambda «Процесс завершен до завершения запроса»
  • 0
    посмотрите на код
Показать ещё 10 комментариев
Теги:
amazon-web-services
aws-lambda
amazon-rds

3 ответа

0
Лучший ответ
  • Существует много документации, в которой говорится, что у вас есть 2 частных подсети для лямбда в вашем VPC и есть подключение к Интернету с использованием шлюза NAT и т.д.
  • На самом деле мне удалось подключиться к RDS по умолчанию VPC непосредственно из лямбда (не помещая его в частные подсети). Проблема в том, что я импортировал файл pymysql внутри папки pacakage, поэтому я получал
    это ошибка таймаута соединения.
  • Я просто должен был префикс пакета из pymysql (package.mysql)
    кроме исключения как ошибка: помогло
0

да, ваша лямбда не находится в vpc, поэтому экземпляр не может обратиться к публичному экземпляру rds, следуйте этой документации, чтобы обеспечить вашу лямбда-функцию интернет-функциональность,

https://aws.amazon.com/it/premiumsupport/knowledge-center/internet-access-lambda-function/

0

Что вам нужно сделать, так это:

Создайте 2 частных подсети для VPC по умолчанию

xxx.xxx.64.0/20
xxx.xxx.128.0/20

Перейдите к вашей функции Lambda в консоли.

Прокрутите вниз и с левой стороны выберите VPC по умолчанию.

Select the 2 Private Subnets as your subnets on your lambda function.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню