невозможно подключиться к экземпляру AWS RDS в VPC по умолчанию из AWS Lambda - PullRequest
0 голосов
/ 24 июня 2018

У меня работает экземпляр RDS mysql

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

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

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

    -В моей лямбда-функции Python -

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

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

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

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

    Возможно ли лямбда-соединение подключиться к экземпляру RDS в VPC по умолчанию?Лямбда не назначена ни одному 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]

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

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

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

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

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

Создание 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.
...