RDS 代理故障排除
下面,您可以找到一些常见 RDS 代理问题的故障排除思路,以及有关 RDS Proxy 的 CloudWatch Logs 的信息。
在 RDS Proxy 日志中,每个条目都以关联的代理终端节点的名称作为前缀。此名称可以是您为用户定义的端点指定的名称。或者,对于执行读/写请求的代理的默认端点,它可以是特殊名称
default
。有关代理终端节点的更多信息,请参阅
使用 Amazon RDS Proxy 终端节点
。
验证代理的连接
您可以使用以下命令验证连接中的所有组件(例如代理、数据库和计算实例)是否均可相互进行通信。
使用 describe-db-proxies 命令检查代理本身。此外,使用 describe-db-proxy-target-groups 命令检查关联的目标组。检查目标的详细信息是否与您打算与代理关联的 Aurora 集群 匹配。使用如下命令。
aws rds describe-db-proxies --db-proxy-name $DB_PROXY_NAME aws rds describe-db-proxy-target-groups --db-proxy-name $DB_PROXY_NAME
要确认代理可以连接到底层数据库,请使用 describe-db-proxy-targets 命令检查目标组中指定的目标。使用如下命令。
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME
describe-db-proxy-targets 命令的输出包括一个
TargetHealth
字段。您可以检查State
内部的字段Reason
、Description
和TargetHealth
,以检查代理是否可以与底层数据库实例进行通信。
State
值AVAILABLE
表示代理可以连接到数据库实例。
State
值UNAVAILABLE
表示存在临时或永久的连接问题。在这种情况下,请检查Reason
和Description
字段。例如,如果Reason
的值为PENDING_PROXY_CAPACITY
,请在代理完成其扩展操作后,重试连接。如果Reason
的值为UNREACHABLE
、CONNECTION_FAILED
或AUTH_FAILURE
,请使用Description
字段中的说明来帮助您诊断问题。在更改为
State
或REGISTERING
之前,AVAILABLE
字段的值可能在短时间内为UNAVAILABLE
。如果以下 Netcat 命令 (
nc
) 成功,您可以从登录的 EC2 实例或其他系统访问代理终端节点。如果您与代理和关联数据库不在同一 VPC 中,则该命令将报告失败。您可能未在同一 VPC 中就可以直接登录到数据库。但是,除非在同一 VPC 中,否则无法登录到代理。nc -zx
MySQL_proxy_endpoint
3306 nc -zxPostgreSQL_proxy_endpoint
5432您可以使用以下命令来确保 EC2 实例具有所需属性。特别是,EC2 实例的 VPC 必须与代理连接到的 RDS 数据库实例Aurora 集群的 VPC 相同。
aws ec2 describe-instances --instance-ids
your_ec2_instance_id
aws secretsmanager list-secrets aws secretsmanager get-secret-value --secret-id
your_secret_id
确保
"ARN": "get-secret-value
显示的SecretString
字段被编码为包含username
和password
字段的 JSON 字符串。以下示例显示了SecretString
字段的格式。some_arn
", "Name": "some_name
", "VersionId": "some_version_id", "SecretString": '{"username":"some_username","password":"some_password
"}', "VersionStages": [ "some_stage
" ], "CreatedDate":some_timestamp
本节介绍使用 RDS 代理时的一些常见问题和潜在的解决方案。
运行
aws rds describe-db-proxy-targets
CLI 命令后,如果TargetHealth
描述显示Proxy does not have any registered credentials
,请验证以下内容:
ERROR 28000: This RDS proxy has no credentials for the role
role_name
. Check the credentials for this role and try again.这个角色没有 Secrets Manager 密钥。
为此角色添加 Secrets Manager 密钥。有关更多信息,请参阅 设置 RDS 代理的 AWS Identity and Access Management(IAM)策略。
ERROR 28P01: IAM authentication failed for user
user_name
. Check the IAM token for this user and try again.该错误可能是由于以下原因引起的:
ERROR 28P01: The IAM authentication failed for the role
role_name
. Check the IAM token for this role and try again.用于 IAM 身份验证的 IAM 令牌存在问题。
生成新的身份验证令牌并在新连接中使用它。