RDS 代理:PENDING_PROXY_CAPACITY 和 "DBProxy Target unavailable due to an internal error"

RDS Proxy: PENDING_PROXY_CAPACITY and "DBProxy Target unavailable due to an internal error"

通过 Terraform 部署 RDS 数据库时,我的默认目标不可用。 运行 以下命令: aws rds describe-db-proxy-targets --db-proxy-name

我得到两个错误: 最初它的状态:PENDING_PROXY_CAPACITY 最终超时并出现以下错误:DBProxy Target unavailable due to an internal error

经过广泛的研究,与 AWS 支持人员进行了两个小时的通话,搜索结果很少,错误如下:PENDING_PROXY_CAPACITY

我偶然发现了以下讨论:https://github.com/hashicorp/terraform-provider-aws/issues/16379

我的配置有几个问题:

  1. 我的 RDS 代理安全组的出站规则仅限于内部流量。这会导致问题,因为您需要 public 互联网访问权限才能访问 AWS Secrets Manager!

  2. 在此处编写 Terraform 文档时建议您可以将“用户名”选项传递给 rds_proxy 资源的 Auth 块(参见:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_proxy)。这是行不通的,并且 returns 错误指出用户名选项不是预期的。这是因为 rds_proxy 期望 Auth 的所有信息都包含在所提供的秘密 arn 中的一个 json 对象中。出于这个原因,我创建了一个包含所有身份验证信息的第二个秘密,如下所示:

resource "aws_secretsmanager_secret_version" "lambda_rds_test_proxy_creds" {
  secret_id     = aws_secretsmanager_secret.lambda_rds_test_proxy_creds.id
  secret_string = jsonencode({
    "username"             = aws_db_instance.lambda_rds_test.username
    "password"             = module.lambda_rds_secret.secret
    "engine"               = "postgres"
    "host"                 = aws_db_instance.lambda_rds_test.address
    "port"                 = 5432
    "dbInstanceIdentifier" = aws_db_instance.lambda_rds_test.id
  })
}
  1. 解决这两个问题仍然给我一个凭据的身份验证错误,这需要 IAM 权限修复(这在上面的 github 问题中讨论过)。但是通过创建新的 Secret 来包含代理所需的所有信息,它不再有权访问新的 Secret,所以我为新创建的资源更新了我的 IAM 角色

我在此处发布此问题是因为 Github 问题已存档,我无法更新评论以包含我的一些搜索词以帮助那些搜索相同问题的人更快地遇到问题关于此处遇到的 RDS_PROXY 错误的信息很少。