我正在尝试将AWS Lambda函数连接到RDS mysql数据库 我只是想从我的lambda函数更新数据库。是否可以通过指定IAM角色和访问策略来访问RDS? 我可以使用mysql client连接到mysql数据库。但是当我尝试使用lambda时,我无法做到这一点。这是我的代码。
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();
};
答案 0 :(得分:76)
是。您可以从AWS Lambda访问MySql RDS数据库。
您可以使用node-mysql
库。
但是,有一个很大的警告。
AWS Lambda(目前)无权访问VPC内的私有子网。因此,为了让AWS Lambda访问您的RDS数据库,它必须是可公开访问的,这可能会给您带来安全风险。
更新(2015-10-30):AWS Lambda宣布即将推出的VPC支持(as of re:Invent 2015),因此这将不再是一个问题。
更新(2015-11-17):AWS Lambda仍然没有VPC支持。
更新(2016-02-11):AWS Lambda现在可以访问VPC资源:
https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/
要实现此功能,您的Lambda函数将实际在子网中的VPC内执行。一些注意事项具有此功能:
答案 1 :(得分:6)
尝试本教程: http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html
在本教程中,您将执行以下操作:
在默认的Amazon VPC中启动Amazon RDS MySQL数据库引擎实例。
在MySQL实例中,您创建了一个包含示例表(Employee)的数据库(ExampleDB)。
创建一个Lambda函数来访问ExampleDB数据库,创建一个表(Employee),添加一些记录,并从表中检索记录。
手动调用Lambda函数并验证查询结果。
答案 2 :(得分:4)
由于Lambda使用Node.js
,Java
和Python
作为后端编程/脚本语言,因此您绝对可以使用它来连接到RDS。 (Link)
最后,This是有关在连接到RDS时指定IAM角色的文档。 (见下图):
答案 3 :(得分:2)
我只是想从我的lambda函数更新数据库。是否可以通过指定IAM角色和访问策略来访问RDS?
不,你不能。您需要提供数据库URL /用户名/密码才能连接。如果Lambda位于私有子网中,则可能需要在同一VPC中运行Lambda。请参阅下面的指示。
我可以使用mysql client连接到mysql数据库。但是当我尝试使用lambda时,我无法做到这一点。
这是严格的否,不!除非您确实需要,否则无法从Internet访问您的RDS。尝试在私有子网中运行它并相应地配置其他AWS服务。
如果您从Lambda获取资源的超时时间,我可以获得两分钱 -
更多详情 - https://play.golang.org/p/E2PL7wE3ls
http://docs.aws.amazon.com/lambda/latest/dg/vpc.html#vpc-internet
PS:以上链接转到我的个人博客,其中包含其他相关信息。