Terraform installation

https://www.terraform.io/downloads.html

export PATH=/path/to/terraform/:$PATH

AWS Setup and first machine launch (first steps)

Create IAM keys. Locate AMI. EC2 AMI Locator

provider "aws" {   access_key = "ACCESS_KEY_HERE"   secret_key = "SECRET_KEY_HERE"   region     = "us-east-1" }  resource "aws_instance" "example" {   ami           = "ami-0d729a60"   instance_type = "t2.micro" }nano first.tf terraform init terraform apply terraform destroy #explain terraform plan? terraform plan -out file; terraform apply file; rm file

Variables (demo 1)

provider.tf

provider "aws" {     access_key = "${var.AWS_ACCESS_KEY}"     secret_key = "${var.AWS_SECRET_KEY}"     region = "${var.AWS_REGION}" }

vars.tf

variable "AWS_ACCESS_KEY" {} variable "AWS_SECRET_KEY" {} variable "AWS_REGION" {   default = "eu-west-1" } variable "AMIS" {   type = "map"   default = {     us-east-1 = "ami-13be557e"     us-west-2 = "ami-06b94666"     eu-west-1 = "ami-0d729a60"   } }

instance.tf

resource "aws_instance" "example" {   ami           = "${lookup(var.AMIS, var.AWS_REGION)}"   instance_type = "t2.micro" }

terraform.tfvars (.gitignore)

AWS_ACCESS_KEY = "" AWS_SECRET_KEY = "" AWS_REGION = ""cat instance.tf cat vars.tf vim terraform.tfvars add AWS_ACCESSS_KEY = "********************************" AWS_SECRET_KEY = "**********************************" terraform plan rm terraform.tfvars terraform plan

Software Provisioning (demo 2)

vim terraform.tfvars cat vars.tf ssh-keygen -f mykey open default security group terraform plan terraform apply

Outputting attributes (demo3)

cat instance.tf

Remote State (demo4)

create bucket (versioning) aws configure vim backend.tf enter: terraform { backend "s3" { bucket: "name",     key: "key" } }   terraform init

Datasources (demo-5)

cat securitygroup.tf terraform apply

Templates

Other providers

Modules (demo-6)

cat key.tf cat vars.tf ssh-keygen -f mykey cat modules.tf terraform get ls .terraform taerraform apply

Terraform Commands (demo-9)

vim terraform.tfstate terraform show | grep public_ cat output.tf terraform output terraform plan terraform taint aws_instance.example terrarorm graph vim vpc.tf terraforn fmt vpc.tf terraform import aws_instance.example id

Terraform with Jenkins, ECR, ECS. (docker-demo-3)

get password, ... install Parameterized trigger plugin new job git - https://github.com/wardviaene/docker-demo shell: docker build -t ecr_link/ecr_id:${GIT_COMMIT} . #(go to jenkins, sudo su - jenkins, aws configure eval "$(aws ecr get-login --region eu-west-1 --no-email )" docker push ecr_link/ecr_id:${GIT_COMMIT}   another job git - https://github.com/vkryzh/terraform-course script: cd docker-demo-3 (this project is parameterized, string, MYAPP_VERSION)   terraform apply -target aws_ecs_service.myapp-server -var MYAPP_SERVICE_ENABLE="1" -var MYAPP_VERSION=${MYAPP_VERSION}