User Tools

Site Tools


devops:terraform

This is an old revision of the document!


Terraform

Glossary

Terraform Module A Terraform module is a set of Terraform configuration files in a single directory.

Installation https://askubuntu.com/questions/983351/how-to-install-terraform-in-ubuntu

Introduction: https://www.terraform.io/intro/getting-started/build.html

Skeleton project https://github.com/skipidar/terraform-skeleton

Apply terraform bash script

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
set -eo pipefail
 
if [[ ! -d ".terraform" ]]
then
  terraform init
fi
 
terraform validate
terraform plan
 
#terraform apply

Upgrade terraform provider

https://developer.hashicorp.com/terraform/tutorials/configuration-language/provider-versioning

1
2
3
4
5
6
7
8
9
10
11
12
13
14
terraform init -upgrade
 
Initializing the backend...
 
Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 5.0"...
- Installing hashicorp/aws v5.21.0...
- Installed hashicorp/aws v5.21.0 (signed by HashiCorp)
 
Terraform has made some changes to the provider dependency selections recorded
in the .terraform.lock.hcl file. Review those changes and commit them to your
version control system if they represent changes you intended to make.
 
Terraform has been successfully initialized!

Main

Create “main.tf

1
2
3
4
5
6
7
8
9
10
11
12
13
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}
 
provider "aws" {
  profile = "default"
  region  = format("%s", var.aws_region)
}

Variables

Create “variables.tf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
variable "aws_region" {
  description = "The AWS region to deploy the resources into"
  type = string
  default = "eu-central-1"
}
 
variable "aws_account_id" {
  description = "The AWS account identifier of the project"
  type = string
  default = "1234567891234"
}
 
variable "prefix" {
  description = "The resource prefix"
  type = string
  default = "alf-dev-con1"
}
 
 
locals {
  iot_policy = "${var.prefix}-thing2"
}

locals defines inner variables. Only here one can combine other variables

Use the variable

1
2
3
4
provider "aws" {
  profile = "default"
  region  = var.region
}

Data

Create templates.tf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
data "template_file" "tf_iot_policy" {
  vars = {
    aws_region = "${var.aws_region}"
    aws_account_id = "${var.aws_account_id}"
  }
  template = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect",
        "iot:Publish",
        "iot:Receive",
        "iot:Subscribe"
      ],
      "Resource": "arn:aws:iot:$${aws_region}:$${aws_account_id}:*"
    }
  ]
}
EOF
}

Usage

1
2
3
4
resource "aws_iot_policy" "iot_policy" {
  name   = "${local.iot_policy}"
  policy = "${data.template_file.tf_iot_policy.rendered}"
}

devops/terraform.1697265277.txt.gz · Last modified: by skipidar