在Terraform中定义 aws 提供程序时,
provider "aws" {
access_key = "<AWS_ACCESS_KEY>"
secret_key = "<AWS_SECRET_KEY>"
region = "<AWS_REGION>"
}
我希望能够使用已经定义的系统变量
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
有什么方法可以让tf文件读取环境变量? 做类似的事情,
provider "aws" {
access_key = env.AWS_ACCESS_KEY_ID
secret_key = env.AWS_SECRET_KEY_ID
region = env.AWS_REGION
}
答案 0 :(得分:6)
是的,可以在Terraform中读取环境变量。有一种非常特定的方法必须完成。您需要使环境变量成为terraform中的变量。
例如,我想将super_secret_variable传递给terraform。我需要在terraform文件中为其创建一个变量。
variable "super_secret_variable" {
type = "string
}
然后根据约定,我必须在环境变量前添加 TF_VAR _ 像这样:
TF_VAR_super_secret_variable
然后,terraform将自动检测并使用它。 Terraform处理器基于特定顺序的变量,该顺序为-var选项,-var-file选项,环境变量,如果在tf文件中定义,则为默认值。
或者,您也可以通过CLI传递环境变量以像这样在terraform中设置变量。
> terraform apply -var super_secret_variable=$super_secret_variable
这不需要您给它加上前缀,因此,如果它们不能更改,则可能是您的最佳做法。
您可以在文档中阅读更多here。
答案 1 :(得分:2)
您可以像这样使用裸露的提供程序:
provider "aws" {}
并确保环境变量在您的Shell会话中可用:
$ export AWS_ACCESS_KEY_ID="your-key-id"
$ export AWS_SECRET_ACCESS_KEY="your-secret-key"
$ export AWS_DEFAULT_REGION="your-region"
然后,检查以上各项是否有效:
terraform plan
如果您满足计划要求,则可以执行terraform apply
进行更改。
有关更多详细信息:https://www.terraform.io/docs/providers/aws/#environment-variables