问题描述
如何在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