RDS 代理:PENDING_PROXY_CAPACITY 和“由于内部错误,DBProxy 目标不可用”

Wil*_*ent 8 amazon-web-services amazon-rds terraform

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

我收到两个错误:最初处于状态:PENDING_PROXY_CAPACITY 最终超时并出现以下错误:DBProxy Target 由于内部错误而不可用

Wil*_*ent 13

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

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

我的配置有几个问题:

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

  2. 在编写 Terraform 文档时,建议您可以将“用户名”选项传递给 rds_proxy 资源的 Auth 块(请参阅:https ://registry.terraform.io/providers/hashicorp/aws/4.26.0/docs /resources/db_proxy)。这不起作用,并返回一个错误,指出不需要用户名选项。这是因为 rds_proxy 希望 Auth 的所有信息都包含在所提供的 Secret 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
  })
}
Run Code Online (Sandbox Code Playgroud)
  1. 修复这两个问题仍然给我带来了凭证身份验证错误,这需要 IAM 权限修复(这在上面的 github 问题中进行了讨论)。但是,通过创建新的 Secret 来包含代理所需的所有信息,它不再能够访问新的 Secret,因此我为新创建的资源更新了我的 IAM 角色

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