亚马逊网络服务-AWS Lambda可以连接到RDS mySQL数据库并更新数据库吗?
我正在尝试将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();
};
4个解决方案
77 votes
是。 您可以从AWS Lambda访问MySql RDS数据库。
您可以使用node-mysql库。
链接:[https://github.com/felixge/node-mysql/]
但是,随之而来的是一个很大的警告。
AWS Lambda(当前)无法访问VPC内部的专用子网。 因此,为了使AWS Lambda访问您的RDS数据库,它必须是可公开访问的,这可能对您构成安全风险。
更新(2015-10-30):AWS Lambda宣布了即将提供的VPC支持(自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-啊-v PC-from-有人-lambda-functions/]
为了实现此功能,您的Lambda函数实际上将在您的VPC内部的子网中执行。 此功能有一些警告:
VPC子网需要足够的可用IP地址来处理Lambda的扩展
如果您的Lambda功能需要Internet访问,则指定的VPC子网将需要Internet网关或NAT
Matt Houser answered 2020-08-06T07:08:27Z
6 votes
试试这个教程:[http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html]
在本教程中,您将执行以下操作:
在默认的Amazon VPC中启动Amazon RDS MySQL数据库引擎实例。
在MySQL实例中,创建一个数据库(ExampleDB),其中包含一个示例表(Employee)。
创建一个Lambda函数来访问ExampleDB数据库,创建一个表(员工),添加一些记录,然后从表中检索记录。
手动调用Lambda函数并验证查询结果。
Pallav answered 2020-08-06T07:09:09Z
4 votes
由于Lambda使用Node.js、Java和Python作为后端编程/脚本语言,因此您绝对可以使用它来连接到RDS。 (链接)
最后,这是有关在连接到RDS时指定IAM角色的文档。 (请参见下图):
Jordan answered 2020-08-06T07:09:34Z
2 votes
我只想从我的lambda函数更新数据库。 是否可以通过指定IAM角色和访问策略来访问RDS?
你不能。 您需要提供数据库URL /用户名/密码进行连接。 如果Lambda在私有子网中,则可能需要在同一VPC中运行它。 请参阅下面的指针。
我可以使用mysql client。连接到mysql数据库,但是当我尝试使用lambda时我无法做到这一点。
这是严格的不,不! 除非确实需要,否则不应从Internet访问RDS。 尝试在专用子网中运行它,并相应地配置其他AWS服务。
如果您超时无法访问Lambda,
默认情况下,Lambda可以访问互联网,并且可以访问在线资源。
Lambda无法访问您的VPC专用子网中破坏的服务。
要连接到专用子网中的服务,您需要运行lambda是专用子网。 为此,您需要转到“网络”部分并配置VPC,子网和安全组。
但是请注意,执行此操作将失去Internet访问。 如果仍然需要Internet访问,则必须在公共子网中启动NAT网关或NAT实例,并配置从专用子网到此NAT的路由。
当我尝试从我的Lambda连接到私有子网中的RDS时遇到了这个问题。 由于我使用KMS加密了一些环境变量,并且解密部分需要Internet访问,因此我不得不使用NAT网关。
更多详细信息-[http://docs.aws.amazon.com/lambda/latest/dg/vpc.html#vpc-internet]
如何从AWS Lambda连接到Postgres RDS
PS:上面的链接转到我的个人博客,其中包含其他相关信息。
Aniket Thakur answered 2020-08-06T07:10:48Z