How to configure environment variables in Hashicorp Terraform

巧了我就是萌 提交于 2020-01-02 06:36:10

问题


I'm quite new to Terraform, though I have gone through all of the instructional modules available on Hashicorp's site.

Currently, I'm struggling with understanding how to set up environment variables. I know how to reference variables in the main.tf config (access_key = "${var.access_key}"), and I know how to save that access key to a separate file and reference that, but what I don't understand (and can't find any documentation/instruction on) is how to set up environment variables so I don't have to save the access key to a file.

Does anyone know how best to go about doing this?


回答1:


Terraform can infer the following environment variables for AWS

export AWS_ACCESS_KEY_ID="anaccesskey"
export AWS_SECRET_ACCESS_KEY="asecretkey"

Ref: https://www.terraform.io/docs/providers/aws/#environment-variables

But I would suggest trying the AWS Profile. You can add credentials to ~/.aws/credentials file like

[myprofile]
aws_access_key_id     = anaccesskey
aws_secret_access_key = asecretkey

and then you can set environment variable export AWS_PROFILE=myprofile. Now, if you run terraform from this shell, it should pick credentials listed under myprofile.

Also, you can have you AWS Provider code as follows:

provider "aws" {
  profile = "myprofile"
  region  = "${var.region}"
}

In my experience, interacting with AWS using profile is easy and better than setting environment variables on each shell.

You can refer an example here https://github.com/pradeepbhadani/tf-examples/blob/master/ex2/provider.tf

Hope this helps.




回答2:


Some providers all you to set provider credentials/configuration via environment variables directly. For example, in the case of the AWS provider you can use the AWS SDK environment variables as mentioned in the AWS provider documentation:

You can provide your credentials via the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, environment variables, representing your AWS Access Key and AWS Secret Key, respectively.

With example usage shown as:

$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
$ export AWS_DEFAULT_REGION="us-west-2"
$ terraform plan

For the Azure provider most of the provider config can be set by environment variables without needing to be defined in the provider configuration:

$ export ARM_CLIENT_ID="aclientid"
$ export ARM_SUBSCRIPTION_ID="asubscriptionid"
$ export ARM_TENANT_ID="atenantid"
$ terraform plan

In the more general case, Terraform will automatically load any defined variables that are prefixed with TF_VAR_.

So if you have something like this:

variable "foo" {}

You can set the value by exporting the TF_VAR_foo environment variable:

export TF_VAR_foo=bar



回答3:


The Terraform way of using environment variables and thus arbitrary values for all good things Terraform are by prefixing any environment variable with TF_VAR_ and then Terraform will automagically use it.

For your specific use case this would mean, that you can set the Terraform variable access_key by setting the **environment* variable TF_VAR_access_key.

This technique is built-in into Terraform itself and is thus independent from any specific provider.

Documentation can be found at https://www.terraform.io/docs/commands/environment-variables.html#tf_var_name it works also for older Terraform version (I've tested it with 0.11).




回答4:


  1. when I started learning tf, I have used a terraform.tfvars file where in I put:
aws_access_key="myaccesskey"
aws_secret_key="mysecertkey"
region='aws-region'

in main.tf:


variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "private_key_path" {}

provider "aws" {
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
  region     = var.region
}

making sure, both files in the same dir.

  1. then I started using env varibles in Mac:
$ export AWS_ACCESS_KEY_ID="AWS_ACCESS_KEY_ID"
$ export AWS_SECRET_ACCESS_KEY="AWS_SECRET_ACCESS_KEY"
$ terraform plan
  1. using profile, ~/.aws/credentials
aws configure
AWS Access Key ID: yourID
AWS Secret Access Key: yourSecert
Default region name : aws-region
Default output format : env

I hope it helps!

good luck, terraform is an amazing thing to learn!



来源:https://stackoverflow.com/questions/55052153/how-to-configure-environment-variables-in-hashicorp-terraform

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!