Psycopg2 on AWS Lambda not connecting to RDS database

Question:

When I try to connect to my RDS Postgresql DB I get the following output

{
   "errorMessage": "2022-01-07T13:28:35.428Z 975a92cd-936c-4d1c-8c23-6318cd609bff Task timed out after 10.01 seconds"
}

The DB is set to public access

Lambda psycopg2 connection code

connection = psycopg2.connect(user=user,
                              password=password,
                              host=host,
                              port=port,
                              database=database)

print(connection)

<connection object at 0x7ff7eb854b90; dsn: 'user=db_user password=db_password dbname=db_name host=rds_host port=5432', closed: 0>

RDS_LAMBDA_SECURITY_GROUP Inbound
enter image description here

VPC Route Table Routes
enter image description here

Also all the subnets are associated to the route table

Lambda_Role permissions
enter image description here

VPC Logs
Lots of REJECTED connections, not sure if it is safe to post a print here. Sometimes the connection to the DB is status ACCEPTED but there are a few other with REJECTED status

Any idea on why I still can’t connect to my DB?

Asked By: Bruno Pigatto

||

Answers:

Whitelist Lambda security group in RDS security group to allow inbound access from lambda. (Add Lambda SG as source SG in RDS Inbound rules with RDS port)

This is required besides having lambda running in the same VPC or in different VPCs with peering

Answered By: omuthu

I had this issue the other week.
Put the lambda function and the RDS in the same VPC, with same security groups and subnets.
Go on to the RDS Connectivity & security tab.
Image showing the endpoint address referenced

The endpoint is your host you put into psycopg2.

This worked for me I used sqlalchemy with psycopg2 engine.

Answered By: Milyan Brewer

I changed the lamba to nodejs, and then followed the exact same steps as this question and then I was able to make it work. I believe the error was related to a public subnet without a NAT

Answered By: Bruno Pigatto