【问题标题】:Terraform: How to pass output from one resource to another?Terraform:如何将输出从一种资源传递到另一种资源?
【发布时间】:2020-12-20 07:16:45
【问题描述】:

我正在使用 Aurora 无服务器 Mysql 和 ECS,并尝试在名为 rds.tf 的文件中使用由 aws secret manager 生成的机密,并希望在名为 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 }

【问题讨论】:

  • 如果这些不是单独的模块,那么您不需要 output 并且您在 aws_ecs_task_definition 资源中拥有的​​内容应该可以工作。你有这方面的问题吗?你有错误吗?如果是这样,您也可以发布错误吗?编辑您的问题以包含 minimal reproducible example 可能会有所帮助,该minimal reproducible example 显示您在做什么并允许其他人重现您的错误。

标签: amazon-web-services terraform amazon-ecs aws-secrets-manager aws-aurora-serverless


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

  2. 如果是分开的,那么你可以使用terraform modules来实现你所需要的。在 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中,另一个需要密码的模块可以读取它。

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

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2015-06-25
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多