Home:ALL Converter>unable to connect to AWS RDS instance in default VPC from AWS Lambda

unable to connect to AWS RDS instance in default VPC from AWS Lambda

Ask Time:2018-06-25T01:48:26         Author:user3036212

Json Formatter

I have a RDS mysql instance running

  1. its assigned in default VPC to all default subnets

  2. has a security group, inbound rule set to listen all Traffic, all protocol, all port ranges and source 0.0.0.0/0

  3. Publicly accessible is set to True

I am able to connect to RDS from SQl Workbench and also from local python script

-In my python lambda function -

  1. have assigned role with AWSLambdaVPCAccessExecutionRole ,lambda_basic_execution

    2.Lambda is not assigned to any VPC

I get following error message from lambda "errorMessage": "RequestId: xx Process exited before completing request"

Code fails at a point where it tries to connect to DB get_database_connection() and in except block logging message logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")

Is it even possible for lambda to connect to RDS instance in default VPC ? lambda is not assigned to any VPC

Lambda Code

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")

followed this link [https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html][1]

Author:user3036212,eproduced under the CC 4.0 BY-SA copyright license with a link to the original source and this disclaimer.
Link to original article:https://stackoverflow.com/questions/51012502/unable-to-connect-to-aws-rds-instance-in-default-vpc-from-aws-lambda
Chad Elias :

What you need to do is this:\n\nCreate 2 private subnets for the default VPC\n\nxxx.xxx.64.0/20\nxxx.xxx.128.0/20\n\n\nGo to your Lambda function in the console. \n\nScroll down and on the left hand side select the default VPC.\n\nSelect the 2 Private Subnets as your subnets on your lambda function.\n",
2018-06-25T20:18:11
Gianmarco Carrieri :

yes, your lambda is not in a vpc so the instance cant contact the rds public instance, follow this documentation for provide to your lambda function the internet \"functionality\"\n\nhttps://aws.amazon.com/it/premiumsupport/knowledge-center/internet-access-lambda-function/",
2018-06-27T15:19:39
yy