Terraform Configuration
With AWS (As of now)
Table of contents
Terraform Block
It contains the Terraform settings and has the basic structure of the following
terraform {
required_providers {
mylocalname = {
source = "source/address"
version = "~> 1.0"
}
}
required_version = ">= 0.14.9"
}
Throughout the module, Terraform refers to providers using a local name. Here I’ve given it a name of mylocalname
.
Source address takes the form of [Hostname/]Namespace/Type
. If Hostname
is ommitted, it defaults to registry.terraform.io
which is Terraform’s default provider install source. hashicorp/aws
is a shorthand for registry.terraform.io/hashicorp/aws
.
For the version constraint syntax, refer to Version Constraint Syntax.
Provider
You can configure each provider using the local name you have provided in the required_providers
of the Terraform block.
For example,
provider "mylocalname" {
# ...
}
Reference Provider Configuration for details.
Resource
Basic syntax is as follows,
resource "aws_instance" "my_server" {
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
}
The example block above declares a resource type "aws_instance"
and gives it a local name of "my_server"
.
Just like the provider local name, resource local name is used to refer to this resource throughout the module.
In addition, the unique ID for the resource becomes aws_instance.my_server
.
The resource configuration arguments within the block body are specific to each resource type.
For an example, refer to documentation here for aws_instance
.
Using variables
To avoid using hard-coded values in configuration, create a new file variables.tf
(name of the file can be anything you want) with the following:
variable "variable_name" {
description = "Some description of what this is"
type = string
default = "This is the value of the variable"
}
You can then use the variables in other .tf
files as,
var.variable_name
You can also pass in a new variable value for testing by
terraform apply -var 'variable_name=SomeOtherValue'
It will modify the state so that all the variables use the new value.
This does not update the original variable declaration. If you run terraform apply
again without the -var
flag, the state will be modified using the original value.
References: