配置 Lambda 函数的数据库访问
您可以为函数创建 Amazon RDS Proxy 数据库代理。数据库代理管理数据库连接池并从函数中继查询。这使得函数能够在不耗尽数据库连接的情况下达到高并发级别。
创建数据库代理(控制台)
您可以使用 Lambda 控制台创建 Amazon RDS Proxy 数据库代理。
创建数据库代理
打开 Lamba 控制台的 Functions(函数)页面
。 -
选择函数。
-
选择 Configuration(配置),然后选择 Database proxies(数据库代理)。
-
选择 Add database proxy (添加数据库代理)。
-
配置以下选项。
-
代理标识符 – 代理的名称。
-
RDS 数据库实例 – 一种受支持的 MySQL 或 PostgreSQL 数据库实例或群集。
-
密钥 – 包含数据库用户名和密码的 Secrets Manager 密钥。
例 密钥
{ "username": "admin", "password": "e2abcecxmpldc897" }
-
IAM 角色 – 拥有使用密钥的权限和允许 Amazon RDS 代入角色的信任策略的 IAM 角色。
-
身份验证 – 用于从您的函数代码连接到代理的身份验证和授权方法。
-
-
选择 Add(添加)。
Amazon RDS 对代理按每小时价格收费,具体由您的数据库的实例大小决定。有关详细信息,请参阅 RDS 代理定价
代理创建需要几分钟。当代理可用时,请将函数配置为连接到代理端点而不是数据库端点。
适用标准 Amazon RDS 代理定价
使用函数的权限进行身份验证
默认情况下,您可以使用用于连接数据库的相同用户名和密码连接到代理。函数代码中的唯一区别是数据库客户端连接到的端点。此方法的缺点是,您必须通过在安全环境变量中配置密码或从 Secrets Manager 中检索密码,将密码公开给函数代码。
您可以创建使用函数的 IAM 凭据,而不是使用密码进行身份验证和授权的数据库代理。要使用函数的权限连接到代理,请将身份验证设置为执行角色。
Lambda 控制台会将所需的权限 (rds-db:connect
) 添加到此执行角色。然后,您可以使用 Amazon 开发工具包生成允许其连接到代理的令牌。以下示例说明如何在 Node.js 中配置与 mysql2
库的数据库连接。
例 dbadmin/index-iam.js
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 用法的示例应用程序。共有两个应用程序:
要使用示例应用程序,请按照 GitHub 存储库中的说明操作:RDS MySQL