Terraform:如何将变量从YAML文件读入Terraform?还是像Hiera这样的DB?

Terraform:如何将变量从YAML文件读入Terraform?还是像Hiera这样的DB?,terraform,Terraform,我想从外部YAML文件或Hiera之类的数据库将变量读入Terraform配置文件,我该怎么做?例如: provider "aws" { region = hiera('virginia') # this should look up for virginia=us-east-1 } resource "aws_instance" { ami = hiera('production') .... .... } 基本上,它类似于我们如何使用hiera或Y

我想从外部YAML文件或Hiera之类的数据库将变量读入Terraform配置文件,我该怎么做?例如:

provider "aws" {
    region = hiera('virginia')    # this should look up for virginia=us-east-1
}

resource "aws_instance" {
    ami = hiera('production') 
    ....
    ....
}

基本上,它类似于我们如何使用hiera或YAML文件查找傀儡清单/配置

必须将变量移动到terraform.tfvars或*.auto.tfvars文件中

要保留变量值,请创建一个文件并在其中分配变量 这个文件。使用以下命令创建名为terraform.tfvars的文件 内容:

访问\u key=“foo”

secret\u key=“bar”

对于与中存在的terraform.tfvars或*.auto.tfvars匹配的所有文件 在当前目录下,Terraform会自动加载它们以进行填充 变量。如果文件名为其他名称,则可以使用 -var file标志直接指定一个文件。这些文件的语法与Terraform配置文件相同。就像地形一样 配置文件,这些文件也可以是JSON


yamldecode
函数可用于读取Yaml文件作为terraform的输入,并对其进行解析以供使用

假设test.yml文件如下所示

a: 1
b: 2
c: 3
然后可以使用下面的代码读取yaml文件

output "log" {
  value = "${yamldecode(file("test.yml"))}"
}
output "log" {
  value = "${yamldecode(file("test.yml"))["a"]}"
}
为了解析从yaml文件读取的特定值

output "log" {
  value = "${yamldecode(file("test.yml"))}"
}
output "log" {
  value = "${yamldecode(file("test.yml"))["a"]}"
}

重要信息:这在0.12或更高版本的terraform中可用,如果使用旧版本的terraform并且仍然希望使用yaml文件,那么使用

您需要自己开发该提供程序,或者编写一个包装器脚本来读取yaml并作为TF_VAR_文件馈送,例如
TF_VAR_virginia
许多选项之一是使用Ansible读取YML文件并替换地形文件中的值。@Steven你有这样的例子吗?这个答案与问题无关。