Running an AWS Lambda Function inside a VPC with access to the internet, RDS, S3, and Secrets Manager
Given a scenario:
- We need a Lambda Function that can access:
- the internet
- RDS in a separate VPC from the Lambda Function
- S3
- Secrets Manager
Setting up access to RDS/S3/Secrets Manager
These resources must be enabled using the Lambda Function’s Role / Security Group
Setting up the Lambda Function’s VPC’s resources
The Lambda Function’s VPC Resource Settings must be:
- public subnet (at least 1)
- private subnet (at least 1)
- internet gateway
- NAT gateway
- s3 connection
Configuring Lambda Function’s VPC Settings
- uses only the private subnet (connected to NAT)
- security group outbound rules must allow connection to HTTP/HTTPS/Postgres
Connecting the RDS VPC to the Lambda VPC using VPC Peering
Original Solution: AWS Docs
- Lambda VPC Route Table must contain route:
- Destination: 172.31.0.0/16 (RDS VPC CIDR)
- Target: Peering Connection Name
- RDS VPC Route Table must contain route:
- Destination: 10.0.0.0/16 (Lambda VPC CIDR)
- Target: Peering Connection Name
Allowing Lambda to access RDS’s Security Group
Add a new Inbound Rule to your RDS database’s Security Group, ving port 5432 access to your Lambda Function’s Security Group.