【问题标题】:RDS Proxy: PENDING_PROXY_CAPACITY and "DBProxy Target unavailable due to an internal error"RDS 代理:PENDING_PROXY_CAPACITY 和“由于内部错误,DBProxy 目标不可用”
【发布时间】:2021-09-18 18:18:44
【问题描述】:

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

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

【问题讨论】:

  • 您是否有任何 TF 代码可以展示该问题并允许其复制?

标签: amazon-web-services terraform amazon-rds


【解决方案1】:

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

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

我的配置有几个问题:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-02-19
    • 2023-01-29
    • 2022-07-01
    • 2022-07-22
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多