我正在尝试配置Terraform,以便它为AWS Secrets使用环境变量。
terraform.tfvars:
access_key = "${var.TF_VAR_AWS_AK}"
secret_key = "${var.TF_VAR_AWS_SK}"
aws_region = "eu-north-1"
main.tf:
provider "aws" {
region = "${var.aws_region}"
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
}
在控制台中(在Windows 10上):
set TF_VAR_AWS_AK = asd12345asd12345
set TF_VAR_AWS_SK = asd12345asd12345
terraform plan
错误消息:
Error: Variables not allowed
on terraform.tfvars line 1:
1: access_key = "${var.TF_VAR_AWS_AK}"
Variables may not be used here.
Error: Variables not allowed
on terraform.tfvars line 2:
2: secret_key = "${var.TF_VAR_AWS_SK}"
Variables may not be used here.
不确定问题出在哪里。 TF文档说可以使用env vars作为秘密。
答案 0 :(得分:2)
要使用环境变量配置提供者和后端,您根本不需要在配置中编写任何特殊内容。相反,您可以只设置与所讨论的提供者有关的常规环境变量。
例如,您似乎正在使用AWS,在这种情况下,您可以使用AWS_ACCESS_KEY_ID
/ AWS_SECRET_ACCESS_KEY
环境变量,也可以填充凭证文件,与AWS开发工具包相同。然后,您可以跳过所有变量声明,而只需减少您的provider块,如下所示:
provider "aws" {
region = "${var.aws_region}"
}
Terraform的AWS提供程序支持与AWS CLI相同的一组凭据源,而无需任何特定于Terraform的配置。这是为AWS提供程序配置凭据的推荐方法,因为您只需要设置一次AWS凭据,即可使用AWS开发工具包,Terraform以及与AWS交互并支持其约定的任何其他软件。>
有关AWS提供程序身份验证选项in the AWS provider documentation的更多信息。
答案 1 :(得分:-1)
如文档此处所述:https://www.terraform.io/docs/configuration/variables.html#environment-variables
环境变量名称必须为TF_VAR_<yourtfvariablename>
。
具有这样的地形变量:
variable "aws_region" {
type = string
}
您的环境变量名称必须为TF_VARS_aws_region
实际上没有办法直接在Terraform中使用环境变量。 (例如:
region = env.AWS_REGION
),您必须使用TF_VAR
来使用环境变量。