AWS Lambda 可以连接到 RDS mySQL 数据库并更新数据库吗?

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

我正在尝试将 AWS Lambda 函数连接到 RDS mysql 数据库。
我只想从我的 lambda 函数更新数据库。是否可以通过指定 IAM 角色和访问策略来访问 RDS?
当我尝试使用 lambda 时,我可以使用 mysql client.but 连接到 mysql 数据库,但我不能这样做。这是我的代码。

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();
};

由于 Lambda 使用 Node.jsJavaPython 作为后端 programming/scripting 语言,您绝对可以使用它来连接 RDS。 (Link)

最后,This是连接RDS时指定IAM角色的文档。 (见下图):

是的。您可以从 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 内执行。此功能附带一些注意事项:

  • VPC 子网需要足够的空闲 IP 地址来处理 Lambda 的扩展
  • 如果您的 Lambda 函数需要互联网访问,那么它指定的 VPC 子网将需要互联网网关或 NAT

试试这个教程: http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html

在本教程中,您将执行以下操作:

在您的默认 Amazon VPC 中启动 Amazon RDS MySQL 数据库引擎实例。

在 MySQL 实例中,您创建了一个数据库 (ExampleDB),其中包含样本 table (Employee)。

创建一个 Lambda 函数来访问 ExampleDB 数据库,创建一个 table (Employee),添加几条记录,并从 table.

中检索记录

手动调用Lambda函数并验证查询结果。

I just wanted to update the database from my lambda function. Is it possible to access RDS by specifiying IAM Role and access Policy?.

不,你不能。您需要提供 DB url/username/password 才能连接。如果它在私有子网中,您可能需要在同一个 VPC 中 运行 Lambda。请参阅下面我的指示。

I can connect to mysql databse using mysql client.but when i try on lambda i can't do that.

这是严格的不,不!除非您真的需要,否则不应从 Internet 访问您的 RDS。尝试在私有子网中 运行 它并相应地配置其他 AWS 服务。

如果您在访问 Lambda 资源时出现超时,我将支付两美分-

  1. 默认情况下,Lambda 可以访问互联网并可以访问在线资源。
  2. Lambda 无法访问在您的 VPC 私有子网中运行的服务。
  3. 要连接到私有子网中的服务,您需要运行lambda 是私有子网。为此,您需要转到“网络”部分并配置您的 VPC、子网和安全组。
  4. 但是请注意,当您执行此操作时,您将失去 Internet 访问权限。如果您仍然需要 Internet 访问,则必须在 public 子网中启动 NAT 网关或 NAT 实例,并配置从私有子网到此 NAT 的路由。
  5. 我在尝试从我的 lambda 连接到私有子网中的 RDS 时遇到了这个问题。由于我使用KMS加密了一些环境变量,解密部分需要上网所以不得不使用NAT网关。

更多详情 - http://docs.aws.amazon.com/lambda/latest/dg/vpc.html#vpc-internet

How to connect to postgres RDS from AWS Lambda

PS: 以上链接转到我的个人博客,其中有更多相关信息。