如何解决Terraform:如何将输出从一种资源传递到另一种资源?
我正在使用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 }
解决方法
-
如果所有Terraform文件都在一个目录中,则可以在为数据库处理时引用
random_password
资源。然后,您可能不需要输出它。 -
如果分开,则可以使用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
})
}
- 将密码存储在terraform的输出中会将其存储为纯文本。即使您使用加密的S3存储桶,仍然至少可以通过terraform来访问密码。共享密码的另一个选项可以是例如使用AWS Parameter Store。创建密码的模块可以将其存储在Param Store中,而另一个需要密码的模块可以读取它。
P.S。您可能想在密码输出中添加sensitive = true
以便从日志中消除密码值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。