加密环境变量并在terraform代码中调用它

问题描述

如何在Terraform中将变量的值设置为机密或将其作为环境变量访问?

例如,我正在供应数据源资源,例如

resource "aws_rds_cluster" "aurora" {
    cluster_identifier            = var.db_cluster_identifier
    database_name                 = var.rds_db_name
    master_username               = var.rds_master_username
    master_password               = var.rds_master_password
    backup_retention_period       = var.backup_retention_period
    preferred_backup_window       = var.preferred_backup_window
    preferred_maintenance_window  = var.preferred_maintenance_window
    db_subnet_group_name          = aws_db_subnet_group.aurora.name
    #final_snapshot_identifier     = var.db_snapshot_cluster_identifier
    vpc_security_group_ids        = [aws_security_group.allow-aurora-db.id]
    skip_final_snapshot           = true
    # ...
}

在这里,我有一个类似的参数: master_password = var.rds_master_password

我的值是作为纯文本存储在“ terraform.tfvars”中的,例如 rds_master_password =“ myDBpwsddnn123”

我的问题是,是否将编码后的值存储在“ terraform.tfvars”中,有什么办法可以在资源文件中对其进行解码?

我正在使用Bitbucket作为我的仓库。我将AWS Secrets Manager用作所有密码的集中存储库,然后我的问题是如何在Terraform资源中获取环境变量以及任何指针?

解决方法

根据您可以在此处找到的terraform文档:https://www.terraform.io/docs/commands/environment-variables.html

将OS环境变量传递到terraform的最简单方法是:

首先,您需要像这样在终端中定义env变量,必须在变量名称中添加前缀TF_VAR_

export TF_VAR_database_secret=<my_secret>

然后在terraform代码中,您可以创建与OS env变量名称相同但不带TF_VAR_前缀的terraform变量。

variable "database_secret" {
    type = string
}

然后,您可以像以前使用变量一样使用var.database_secret

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...