devops:terraform
This is an old revision of the document!
−Table of Contents
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