Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

can AWS Lambda connect to RDS mySQL database and update the database?

I am trying to connect AWS Lambda function to RDS mysql database.
I just wanted to update the database from my lambda function. Is it possible to access RDS by specifiying IAM Role and access Policy?.
I can connect to mysql databse using mysql client.but when i try on lambda i can't do that. here is my code.

console.log('Loading function'); var doc = require('dynamodb-doc'); var dynamo = new doc.DynamoDB(); var mysql = require('mysql'); exports.handler = function(event, context) {     //console.log('Received event:', JSON.stringify(event, null, 2));       var operation = event.operation;     delete event.operation;     switch (operation) {         case 'create':             var conn = mysql.createConnection({                 host: 'lamdatest.********.rds.amazonaws.com', // RDS endpoint                  user: 'user', // MySQL username                  password: 'password', // MySQL password                  database: 'rdslamda'             });             conn.connect();             console.log("connecting...");             conn.query('INSERT INTO login (name,password) VALUES("use6","password6")', function(err, info) {                 console.log("insert: " + info.msg + " /err: " + err);             });             console.log("insert values in to database");             break;         case 'read':             dynamo.getItem(event, context.done());             break;          default:             context.fail(new Error('Unrecognized operation "' + operation + '"'));      }     context.succeed(); }; 
like image 463
ARUNBALAN NV Avatar asked Aug 04 '15 12:08

ARUNBALAN NV


People also ask

Can Lambda talk to RDS?

To connect a Lambda function to an RDS instance, the networking configurations on each must be set to allow the connection. There are different configuration settings for each of the following connection types: A Lambda function and RDS instance in the same VPC. A Lambda function and RDS instance in different VPCs.

How do I connect to AWS RDS MySQL?

Sign in to the AWS Management Console and open the Amazon RDS console at https://console.aws.amazon.com/rds/ . In the navigation pane, choose Databases to display a list of your DB instances. Choose the name of the MySQL DB instance to display its details. On the Connectivity & security tab, copy the endpoint.


2 Answers

Yes. You can access a MySql RDS database from AWS Lambda.

You can use node-mysql library.

  • Link: https://github.com/felixge/node-mysql/

However, there is a big caveat that goes with it.

AWS Lambda does not (currently) have access to private subnets inside a VPC. So in order for AWS Lambda to access your RDS database, it must be publicly accessible, which could be a security risk for you.

Update (2015-10-30): AWS Lambda announced upcoming VPC support (as of re:Invent 2015), so this won't be an issue for much longer.

Update (2015-11-17): AWS Lambda still does not have VPC support.

Update (2016-02-11): AWS Lambda can now access VPC resources:

https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/

To achieve this functionality, your Lambda function will actually execute inside your VPC in a subnet. Some caveats come with this functionality:

  • The VPC subnet needs enough free IP addresses to handle Lambda's scaling
  • If your Lambda function needs internet access, then it's designated VPC subnet will need an Internet Gateway or NAT
like image 199
Matt Houser Avatar answered Oct 13 '22 06:10

Matt Houser


try this tutorial: http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html

In this tutorial, you do the following:

Launch an Amazon RDS MySQL database engine instance in your default Amazon VPC.

In the MySQL instance, you create a database (ExampleDB) with a sample table (Employee) in it.

Create a Lambda function to access the ExampleDB database, create a table (Employee), add a few records, and retrieve the records from the table.

Invoke the Lambda function manually and verify the query results.

like image 43
Pallav Avatar answered Oct 13 '22 06:10

Pallav