How to use terraform with environment variables in a .tf file

I'm new to Terraform, and I ran into some kind of problem when trying to use environment variables with a .tf file, I tried using terraform.tfvars / variables.tf .

 ./terraform apply -var-file="terraform.tfvars" Failed to load root config module: Error parsing variables.tf: At 54:17: illegal char 

What am I missing here?

Terraform Version: Terraform v0.9.2

main.tf:

 provider "aws" { access_key = "${var.aws_access_key}" secret_key = "${var.aws_secret_key}" region = "${var.aws_region}" allowed_account_ids = ["${var.aws_account_id}"] } resource "aws_instance" "db" { ami = "ami-49c9295" instance_type = "t2.micro" tags { Name = "test" } connection { user = "ubuntu" } security_groups = ["sg-ccc943b0"] availability_zone = "${var.availability_zone}" subnet_id = "${var.subnet_id}" } 

terraform.tfvars:

 aws_profile = "default" aws_access_key = "xxxxxx" aws_secret_key = "xxxxxx" aws_account_id = "xxxxxx" key_name = "keyname" key_path = "/home/user/.ssh/user.pem" aws_region = "us-east-1" subnet_id = "subnet-51997e7a" vpc_security_group_ids = "mysql" instance_type = "t2.xlarge" availability_zone = "us-east-1a" 

variables.tf:

 variable "key_name" { description = "Name of the SSH keypair to use in AWS." default = "keypairname" } variable "key_path" { description = "Path to the private portion of the SSH key specified." default = "/home/user/.ssh/mypem.pem" } variable "aws_region" { description = "AWS region to launch servers." default = "us-east-1" } variable "aws_access_key" { decscription = "AWS Access Key" default = "xxxxxx" } variable "aws_secret_key" { description = "AWS Secret Key" default = "xxxxxx" } variable "aws_account_id" { description = "AWS Account ID" default = "xxxxxx" } variable "subnet_id" { description = "Subnet ID to use in VPC" default = "subnet-51997e7a" } variable "vpc_security_group_ids" { description = "vpc_security_group_ids" default = "sec" } variable "instance_type" { description = "Instance type" default = "t2.xlarge" } variable "instance_name" { description = "Instance Name" default = "test" } variable "availability_zone" { description = "availability_zone" default = "us-east-1a" } variable "aws_amis" { default = { "us-east-1": "ami-49c9295f", "eu-west-1": "ami-49c9295f", "us-west-1": "ami-49c9295f", "us-west-2": "ami-49c9295f" } } 

Update

After deleting the variable "aws_amis" section from variables.tf I ran into another problem:

 Failed to load root config module: Error loading variables.tf: 1 error(s) occurred: * variable[aws_access_key]: invalid key: decscription 
+7
amazon-web-services terraform
source share
1 answer

The aws_amis variable used as a search map looks incorrectly formatted for me. Instead, it should probably have the format:

 variable "aws_amis" { default = { us-east-1 = "ami-49c9295f" eu-west-1 = "ami-49c9295f" us-west-1 = "ami-49c9295f" us-west-2 = "ami-49c9295f" } } 

As a third-party, Terraform will look for terraform.tfvars by default, so you can reset -var-file="terraform.tfvars" . You will need to pass the -var-file option if you want to use a file with other names (for example, prod.tfvars ), but you can omit it for this.

+3
source share

All Articles