配置 Lambda 函数的数据库访问 - AWS Lambda
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

配置 Lambda 函数的数据库访问

您可以使用 Lambda 控制台为您的函数创建 Amazon RDS Proxy 数据库代理。数据库代理管理数据库连接池并从函数中继查询。这使得函数能够在不耗尽数据库连接的情况下达到高并发级别。

创建数据库代理

  1. 打开 Lambda 控制台 函数页面

  2. 选择函数。

  3. 选择 Add database proxy (添加数据库代理)

  4. 配置以下选项。

    • 代理标识符 – 代理的名称。

    • RDS 数据库实例 – 一种受支持的 MySQL 或 PostgreSQL 数据库实例或群集。

    • 密钥 – 包含数据库用户名和密码的 Secrets Manager 密钥。

      例 密钥

      { "username": "admin", "password": "e2abcecxmpldc897" }
    • IAM 角色 – 拥有使用密钥的权限和允许 Amazon RDS 代入角色的信任策略的 IAM 角色。

    • 身份验证 – 用于从您的函数代码连接到代理的身份验证和授权方法。

  5. 选择 Add

定价

Amazon RDS 对代理按每小时价格收费,具体由您的数据库的实例大小决定。有关详细信息,请参阅 RDS 代理定价

代理创建需要几分钟。当代理可用时,请将函数配置为连接到代理终端节点而不是数据库终端节点。

适用标准 Amazon RDS 代理定价。有关更多信息,请参阅 Amazon Aurora 用户指南 中的使用 Amazon RDS 代理管理连接

使用函数的权限进行身份验证

默认情况下,您可以使用用于连接数据库的相同用户名和密码连接到代理。函数代码中的唯一区别是数据库客户端连接到的终端节点。此方法的缺点是,您必须通过在安全环境变量中配置密码或从 Secrets Manager 中检索密码,将密码公开给函数代码。

您可以创建使用函数的 IAM 凭据,而不是使用密码进行身份验证和授权的数据库代理。要使用函数的权限连接到代理,请将身份验证设置为执行角色

Lambda 控制台会将所需的权限 (rds-db:connect) 添加到此执行角色。然后,您可以使用 AWS 开发工具包生成允许其连接到代理的令牌。以下示例说明如何在 Node.js 中配置与 mysql2 库的数据库连接。

dbadmin/index-iam.js – AWS 开发工具包签署人

const signer = new AWS.RDS.Signer({ region: region, hostname: host, port: sqlport, username: username }) exports.handler = async (event) => { let connectionConfig = { host : host, user : username, database : database, ssl: 'Amazon RDS', authPlugins: { mysql_clear_password: () => () => signer.getAuthToken() } } var connection = mysql.createConnection(connectionConfig) var query = event.query var result connection.connect()

有关更多信息,请参阅 Amazon RDS 用户指南 中的 IAM 数据库身份验证

示例应用程序

使用本指南的 GitHub 存储库中提供的 Amazon RDS 数据库演示 Lambda 用法的示例应用程序。共有两个应用程序:

  • RDS MySQL – AWS CloudFormation 模板 template-vpcrds.yml 在私有 VPC 中创建 MySQL 5.7 数据库。在示例应用程序中,Lambda 函数将查询委托给数据库。函数和数据库模板都使用 Secrets Manager 来访问数据库凭证。

    
                The dbadmin function relays queries to a database.

  • 列表管理器 – 处理器函数从 Kinesis 流读取事件。它使用事件中的数据来更新 DynamoDB 表,并将事件的副本存储在 MySQL 数据库中。

    
                The processor function processes Kinesis events and stores the events in a
                  MySQL database.

要使用示例应用程序,请按照 GitHub 存储库中的说明操作:RDS MySQL列表管理器