AWS RDS DescribeDbInstances - 仅使用IaaC将结果列表限制为特定实例

问题描述 投票:1回答:1

我正在尝试使用Terraform配置一个架构,并确保应用程序尽可能少地了解周围的任何事情。

我的目标是让一个使用亚马逊SDK的应用程序询问哪些RDS实例可用于它,然后连接到其中一个。这样,就不需要外部信息(db-instance-identifierTag)。

该应用程序只会描述RDS实例,并且由于它运行的EC2将被Terraform仅授予特定RDS的权限,因此它只能获得describe-db-instances的一个结果。然后,通过使用RDS IAM身份验证机制,应用程序将连接到数据库并实现其目的。

虽然从我所看到的,例如in this SO question和AWS RDS文档describe-db-instances是“全有或全无”类型的命令。在EC2实例配置文件中赋予IAM角色的IAM策略必须具有Resource: "*"。但是,描述包含所有RDS实例,而不仅仅是应该允许连接的EC2。应用程序无法区分哪个n结果与实例列表一起使用。

另一方面,当您将describe-db-instances限制为特定资源时,唯一可以无故障描述的方法是将db-instance-identifier添加到请求中:

aws rds describe-db-instances --db-instance-identifier databasename

但是,应用程序需要从“外部”检索db-instance-identifier,这也无法满足我的要求。

也许在我的推理的某些部分我弄错了,但它甚至可能实现吗?

amazon-web-services amazon-rds terraform
1个回答
0
投票

如果使用相同的Terraform部署配置RDS实例,则可以执行以下操作:

locals {
  allowed_rds_nodes = aws_db_instance.foo.*.id
}

这是一个基本的高级抽象,但您可以将DB节点的ID列表传递给负责创建EC2实例的Terraform模块/代码。

如果RDS节点已经存在,并且Terraform代码仅负责EC2实例,那就有点棘手了。

您是正确的,因为RDS实例(当前)的唯一有效查询或过滤机制是基于名称的。您需要使用数据源,并在数据库节点上强制执行某种基本的命名正则表达式。

data "aws_db_instance" "allowed_rds_nodes" {
  db_instance_identifier = "some-foo-bar"
}
© www.soinside.com 2019 - 2024. All rights reserved.