为 Amazon Aurora 创建代理
您可以使用 Amazon RDS 代理,通过更高效地建立连接池和管理数据库失效转移,来提高数据库应用程序的可扩展性、可用性和安全性。本主题将引导您完成创建代理的过程。在开始之前,请确保您的数据库满足必要的先决条件,包括 IAM 权限和 VPC 配置。
您可以将代理与 Aurora MySQL 或 Aurora PostgreSQL 数据库集群相关联。
创建代理
-
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Proxies (代理)。
-
选择 Create proxy (创建代理)。
-
为代理配置以下设置。
设置 描述 引擎系列 代理在解释进出数据库的网络流量时识别的数据库网络协议。 代理标识符 在您的 Amazon 账户 ID 和当前 Amazon 区域内具有唯一性的名称。 空闲客户端连接超时 如果客户端连接在设定的时间段内保持空闲,则代理会关闭客户端连接。默认情况下,这是 1800 秒(30 分钟)。当应用程序在完成上一个请求后的指定时间内未提交新请求时,连接处于空闲状态。代理将底层数据库连接保持为打开状态,并将其返回到连接池,使其可用于新的客户端连接。
要主动移除过时的连接,请减少空闲客户端连接超时。要最大限度地降低工作负载高峰期间的连接成本,请增加此超时。
数据库 要通过此代理访问的 Aurora 数据库集群。该列表仅包含具有兼容数据库引擎、引擎版本和其他设置的数据库实例和集群。如果列表为空,请创建与 RDS Proxy 兼容的新数据库实例或集群。为此,请按照创建 Amazon Aurora 数据库集群中的过程操作 然后,尝试再次创建代理。 连接池最大连接数 一个介于 1 到 100 之间的值,用于定义 RDS 代理可以使用的 max_connections
限制的百分比。如果您只打算对此数据库实例或集群使用一个代理,请将此值设置为 100。有关 RDS 代理如何使用此设置的更多信息,请参阅 MaxConnectionsPercent。会话绑定筛选条件 防止 RDS 代理绑定某些检测到的会话状态来绕过多路复用连接的默认安全措施。目前,PostgreSQL 不支持此设置,唯一可用的选项是
EXCLUDE_VARIABLE_SETS
。启用它可能会导致来自一个连接的会话变量影响其它连接,如果查询依赖于在当前事务之外设置的会话变量,则会导致错误或正确性问题。只有在确认您的应用程序可以安全地共享数据库连接后,才能使用此选项。以下模式被认为是安全的:
-
SET
语句,其中没有更改有效会话变量值。换句话说,会话变量没有变化。 -
您可以更改会话变量值并在同一个事务中执行一条语句。
有关更多信息,请参阅 避免固定 RDS 代理。
连接借用超时 如果您希望代理使用所有可用的数据库连接,请设置在代理返回超时错误之前的等待时间。最多可以指定五分钟。仅当代理已达到最大连接数并且所有连接都在使用中时,此设置才适用。 初始化查询 通过指定一个或多个 SQL 语句来添加或修改初始化查询,以便代理在打开新的数据库连接时运行。此设置通常与 SET
语句一起使用,以确保连接设置的一致性。确保查询有效,并在SET
语句中使用逗号来分隔多个变量。例如:SET
variable1
=value1
,variable2
=value2
对于多条语句,请用分号来分隔它们。
Amazon Identity and Access Management(IAM)角色 一个有权访问 Secrets Manager 密钥的 IAM 角色,这些密钥代表代理可以使用的数据库用户账户的凭证。或者,您可以从 Amazon Web Services Management Console创建新的 IAM 角色。
Secrets Manager 密钥 至少选择一个 Secrets Manager 密钥,该密钥包含允许代理访问 Aurora 数据库集群的数据库用户凭证。 客户端身份验证类型 代理对来自客户端的连接使用的身份验证类型。您的选择适用于与此代理关联的所有 Secrets Manager 密钥。如果您需要为每个密钥指定不同的客户端身份验证类型,请使用 Amazon CLI 或改用 API 创建代理。 IAM 身份验证 是要求还是禁止对代理连接进行 IAM 身份验证。您的选择适用于与此代理关联的所有 Secrets Manager 密钥。如果您需要为每个密钥指定不同的 IAM 身份验证,请使用 Amazon CLI 或改用 API 创建代理。 需要传输层安全性 对所有客户端连接强制执行 TLS/SSL。代理对其与底层数据库的连接使用相同的加密设置,无论客户端连接是已加密还是未加密。
子网 此字段预填充与您的 VPC 关联的所有子网。您可以移除代理不需要的任何子网,但必须至少保留两个子网。
VPC 安全组 选择现有 VPC 安全组或者从 Amazon Web Services Management Console创建一个新的安全组。配置入站规则以支持应用程序访问代理,并配置出站规则以支持来自数据库目标的流量。
注意
此安全组必须支持从代理到数据库的连接。它既用于从应用程序到代理的入口,也用于从代理到数据库的出口。例如,如果您对数据库和代理使用相同的安全组,则确保该安全组中的资源可以相互通信。
使用共享 VPC 时,避免使用 VPC 的默认安全组或与另一个账户关联的安全组。而是选择属于您的账户的安全组。如果不存在安全组,则创建一个安全组。有关更多信息,请参阅使用共享 VPC。
RDS 跨多个可用区部署代理以确保高可用性。要启用跨可用区通信,代理子网的网络访问控制列表(ACL)必须支持引擎端口上的出口和所有端口上的入口。有关网络 ACL 的更多信息,请参阅使用网络 ACL 控制指向子网的流量。如果代理和目标的网络 ACL 相同,则必须添加 TCP 协议入口规则,其中源设置为 VPC CIDR。您还必须添加特定于引擎端口的 TCP 协议出口规则,其中目标设置为 VPC CIDR。
激活增强的日志记录 启用该设置可解决代理兼容性或性能问题。启用后,RDS 代理会记录详细的性能信息,有助于您调试 SQL 行为或代理连接性能和可扩展性。
仅启用此设置来进行调试,并确保已采取适当的安全措施来保护日志中的敏感信息。为了最大限度地减少开销,RDS 代理会在激活后 24 小时自动禁用此设置。可以临时使用它来解决特定问题。
-
-
选择 Create proxy (创建代理)。
要使用 Amazon CLI 创建代理,请使用以下必需的参数调用 create-db-proxy 命令:
--db-proxy-name
--engine-family
--role-arn
--auth
--vpc-subnet-ids
--engine-family
值区分大小写。
例
对于 Linux、macOS 或 Unix:
aws rds create-db-proxy \ --db-proxy-name
proxy_name
\ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \ --authProxyAuthenticationConfig_JSON_string
\ --role-arniam_role
\ --vpc-subnet-idsspace_separated_list
\ [--vpc-security-group-idsspace_separated_list
] \ [--require-tls | --no-require-tls] \ [--idle-client-timeoutvalue
] \ [--debug-logging | --no-debug-logging] \ [--tagscomma_separated_list
]
对于 Windows:
aws rds create-db-proxy ^ --db-proxy-name
proxy_name
^ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } ^ --authProxyAuthenticationConfig_JSON_string
^ --role-arniam_role
^ --vpc-subnet-idsspace_separated_list
^ [--vpc-security-group-idsspace_separated_list
] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeoutvalue
] ^ [--debug-logging | --no-debug-logging] ^ [--tagscomma_separated_list
]
以下是 --auth
选项的 JSON 值的示例。此示例对每个密钥应用不同的客户端身份验证类型。
[ { "Description": "proxy description 1", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789123:secret/1234abcd-12ab-34cd-56ef-1234567890ab", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_SCRAM_SHA_256" }, { "Description": "proxy description 2", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122223333:secret/1234abcd-12ab-34cd-56ef-1234567890cd", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_MD5" }, { "Description": "proxy description 3", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122221111:secret/1234abcd-12ab-34cd-56ef-1234567890ef", "IAMAuth": "REQUIRED" } ]
提示
如果您尚不知道要用于 --vpc-subnet-ids
参数的子网 ID,请参阅 设置 RDS 代理的网络先决条件 获取有关如何查找它们的示例。
注意
安全组必须允许访问代理连接到的数据库。同一安全组用于从应用程序到代理的入口以及从代理到数据库的出口。例如,假设您对数据库和代理使用同一安全组。在这种情况下,请确保您指定该安全组中的资源可以与同一安全组中的其他资源进行通信。
使用共享 VPC 时,您不能使用 VPC 的默认安全组,也不能使用属于其他账户的安全组。选择属于您账户的安全组。如果不存在,请创建一个。有关此限制的详细信息,请参阅使用共享 VPC。
要为代理创建正确的关联,您还可以使用 register-db-proxy-targets 命令。指定目标组名称 default
。创建每个代理时,RDS Proxy 会自动创建一个此名称的目标组。
aws rds register-db-proxy-targets --db-proxy-name
value
[--target-group-nametarget_group_name
] [--db-instance-identifiersspace_separated_list
] # rds db instances, or [--db-cluster-identifierscluster_id
] # rds db cluster (all instances)
要创建 RDS 代理,请调用 Amazon RDS API 操作 CreateDBProxy。传递具有 AuthConfig 数据结构的参数。
创建每个代理时,RDS Proxy 会自动创建一个名为 default
的目标组。通过调用函数 RegisterDBProxyTargets,将 Aurora 数据库集群与目标组关联。