1

我正在使用 Aurora 无服务器 Mysql 和 ECS,并尝试在名为 rds.tf 的文件中使用由 aws 机密管理器生成的机密,并希望在名为 ecs.tf 的文件中使用它的另一个资源

resource "random_password" "db_instance_aurora_password" {
  length  = 40
  special = false
  keepers = {
    database_id = aws_secretsmanager_secret.db_instance_aurora_master_password.id
  }

上面是 rds.tf,它可以工作并生成一个随机密码。在我的第二个文件 ecs.tf 中,我想使用

resource "aws_ecs_task_definition" "task" {
  family = var.service_name
  container_definitions = templatefile("${path.module}/templates/task_definition.tpl", {
    DB_USERNAME  = var.db_username
    DB_PASSWORD  = random_password.db_instance_aurora_password.result
  })
}

如何导出 db_password 的输出并将其用于另一个资源(ecs.tf)?

output "aurora_rds_cluster.master_password" {
  description = "The master password"
   value    =  random_password.db_instance_aurora_password.result }
4

1 回答 1

1
  1. 如果所有 terraform 文件都在一个目录中,您可以random_password像为数据库那样引用资源。那么你可能不需要输出它。

  2. 如果它是分开的,那么您可以使用terraform 模块来实现您所需要的。在 ECS terraform 中,您可以引用 RDS 模块,您将可以访问其输出:

module "rds" {
  source = "path/to/folder/with/rds/terraform"
}

resource "aws_ecs_task_definition" "task" {
  family = var.service_name
  container_definitions = templatefile("${path.module}/templates/task_definition.tpl", {
    DB_USERNAME  = var.db_username
    DB_PASSWORD  = module.rds.aurora_rds_cluster.master_password
  })
}
  1. 在 terraform 的输出中存储密码会将其存储为纯文本。即使您使用加密的 S3 存储桶,至少仍然可以通过 terraform 访问密码。共享密码的另一个选项可以是例如使用 AWS Parameter Store。创建密码的模块可以将其存储在 Param Store 中,另一个需要密码的模块可以读取它。

PS您可能希望添加sensitive = true到密码输出中以从日志中消除密码值。

于 2020-09-01T09:12:08.120 回答