如何配置我的 Lambda 函数以使用 Amazon RDS 代理连接到 Amazon RDS 数据库?

2 分钟阅读
0

我想将我的 AWS Lambda 函数配置为使用 Amazon RDS 代理连接到 Amazon Relational Database Service (Amazon RDS) 数据库。

简短描述

您可以为您的 Lambda 函数创建 Amazon RDS 代理数据库。数据库代理管理数据库连接池,并中继来自函数的查询。这让函数达到高并发级别,而不会耗尽数据库连接。

有关更多信息,请参阅配置 Lambda 函数的数据库访问权限

解决方法

按照以下说明使用 Lambda 函数配置 Amazon RDS 代理。

注意: Amazon RDS 代理必须与 Amazon RDS 数据库位于同一个 Amazon Virtual Private Cloud (Amazon VPC) 中。使用 Amazon VPC 配置 Lambda 函数来访问 Amazon RDS 代理。

步骤 1:在 AWS Secrets Manager 中,创建数据库凭证

1.    打开 Secrets Manager 控制台,然后选择 Store a new secret(存储新密钥)。

2.    在密钥类型中,选择 RDS 数据库凭证

3.    输入您的 Amazon RDS 数据库实例的用户名密码

4.    对于加密密钥,请选择 Secrets Manager 用来加密密钥值的 AWS Key Management Service (AWS KMS) 密钥**。**

5.    对于数据库,选择您的数据库,然后选择下一步

6.    对于 Secret name(密钥名称),输入名称,选择 Next(下一个),接着再次选择 Next(下一个),然后选择 Store(存储)。

7.    在 Secrets(密钥)中,选择您创建的 Secrets Manager 密钥。

8.    在 Secret ARN(密钥 ARN)中,复制 ARN 以在其他步骤中使用。

有关更多信息,请参阅创建 AWS Secrets Manager 数据库密钥

步骤 2:为 Amazon RDS 代理创建 AWS Identity and Access Management (IAM) 策略和角色

创建一个有权限使用这个密钥的 IAM 角色,然后创建一个信任策略,允许 Amazon RDS 承担这个角色。

IAM Secrets Manager 策略示例

注意:Secret_ARN 替换为您之前复制的 Secrets Manager ARN

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetResourcePolicy",
        "secretsmanager:GetSecretValue",
        "secretsmanager:DescribeSecret",
        "secretsmanager:ListSecretVersionIds"
      ],
      "Resource": [
        "[Secret_ARN]"
      ]
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetRandomPassword",
        "secretsmanager:ListSecrets"
      ],
      "Resource": "*"
    }
  ]
}

示例 IAM RDS 信任策略

{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Sid": "",
   "Effect": "Allow",
   "Principal": {
    "Service": "rds.amazonaws.com"
   },
   "Action": "sts:AssumeRole"
  }
 ]
}

步骤 3:创建 RDS 代理并将其连接到 Lambda 函数

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

2.    在函数中,选择您的 Lambda 函数。

3.    选择 Configuration(配置),然后选择 Add database proxies(添加数据库代理)。

4.    输入以下变量:
Proxy identifier(代理标识符):代理的名称。
RDS DB instance(RDS 数据库实例):支持的 MySQL 或 PostgreSQL 数据库实例或集群。
Secret(密钥):您所创建的 Secrets Manager。
IAM role(IAM 角色):您已创建的 IAM 角色。
Authentication(身份验证):选择 Password(密码)以连接数据库凭证,或选择 Execution role(执行角色)以使用函数的 IAM 证书进行身份验证

5.    选择 Add(添加)。

代理创建需要几分钟才能完成。当代理可用时,将您的函数配置为连接到代理端点而不是数据库端点。有关更多信息,请参阅创建数据库代理(控制台)

步骤 4:(可选)确认您的 Amazon RDS 代理正在使用 IAM 身份验证

仅当您使用 Lambda 执行角色向 Amazon RDS 代理进行身份验证时,才需要执行以下步骤。

1.    打开 Amazon RDS 控制台

2.    在导航窗格中,选择 Proxies(代理),然后选择您的代理。

3.    选择操作,然后选择修改

4.    在连接模块中,确保将 IAM 身份验证设置为必需

注意: 如果您遇到连接问题,请参阅 为什么我无法使用 RDS 代理连接到我的 Amazon RDS 数据库或 Amazon Aurora 数据库实例? 有关更多信息,请参阅读将 Amazon RDS 代理与 AWS Lambda 配合使用


相关信息

如何排查在尝试访问 Amazon RDS 数据库实例时 Lambda 中的连接超时错误?

如何配置 Lambda 函数以连接到 RDS 实例?

如何解决将 Amazon RDS 代理附加到 Lambda 函数时的 "Lambda could not update the function's execution role"(Lambda 无法更新函数的执行角色)错误?

AWS 官方
AWS 官方已更新 1 年前