Terraform – Notes – Day 2 – August

DevOps

MOTOSHARE 🚗🏍️
Turning Idle Vehicles into Shared Rides & Earnings

From Idle to Income. From Parked to Purpose.
Earn by Sharing, Ride by Renting.
Where Owners Earn, Riders Move.
Owners Earn. Riders Move. Motoshare Connects.

With Motoshare, every parked vehicle finds a purpose. Owners earn. Renters ride.
🚀 Everyone wins.

Start Your Journey with Motoshare

terraform init
terraform validate
terraform plan
terraform apply
terraform show
terraform output
terraform destory

Training Material

  • https://devopsschool.com/slides/terraform/index.html
  • https://www.devopsschool.com/blog/?s=terraform
  • Recording

Revision

  • What is Terraform?
  • Terraform installation
  • Terraform Basic Workflow
  • Terraform Variables

Variables Labs

variable "instance_count" {
  type = number
  default = 1
}

resource "aws_instance" "example" {
  count = var.instance_count
  ami           = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
}

variable "instance_name" {
  type = string
  default = "my-instance"
}

resource "aws_instance" "example-number" {
  count = var.instance_count
  ami           = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
}


variable "security_groups" {
  type = list(string)
  default = ["sg-0541801a7a059ba17"]
}


resource "aws_instance" "example-list" {
  ami           = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
  vpc_security_group_ids = var.security_groups
}

variable "instance_tags" {
  type = map(string)
  default = {
    Name = "my-instance"
  }
}

resource "aws_instance" "example-map" {
  ami           = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
  tags = var.instance_tags
}

variable "create_vm" {
  description = "If set to true, it will create vm"
   type   = bool
}

resource "aws_instance" "example-bool" {
  count   = var.create_vm ? 1 : 0
  ami           = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
  tags = var.instance_tags
}Code language: PHP (php)

How to set conditions in Terraform?

How to set conditions in Terraform?
https://www.devopsschool.com/blog/terraform-conditioning-example-program

GLOBAL ARGUMENT == Meta Arugumnets OF each Resources

https://www.devopsschool.com/blog/terraform-tutorials-meta-arguments
https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on

resources
		arg1=value
		arg2=value
		arg3=value
		count
		for_each
		depends_on	
				implicit
				explicit

res1 should exec
		if some vars are set or 

variable "create_instance" {
  description = "If set to true, it will create vm"
   type   = bool
}

resource "aws_instance" "example-expressor" {
  ami           = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
  count         = var.create_instance ? 1 : 0

  tags = {
    Name = "My EC2 Instance"
  }
}

variable "instance_type" {
  default = "t2.micro"
}

resource "aws_instance" "example-depends-on" {
  ami           = "ami-053b0d53c279acc90"
  instance_type = var.instance_type

  tags = {
    Name = "My EC2 Instance"
  }
}

resource "aws_s3_bucket" "example_bucket" {
  depends_on = [aws_instance.example-depends-on]
  bucket     = "my-unique-bucket-name-dksjdhsakjdhakjhdkj"
  acl        = "private"
}
Code language: JavaScript (javascript)

How to loop / iterate in Terraform?

  • count
  • for_each
    https://www.devopsschool.com/blog/how-to-do-looping-iterations-in-terraform/
resource "aws_instance" "example" {
  count = 2
  ami = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
}

variable "repo-name" {
   type = map
  default = {
      "repo1" = "devops1"
      "repo2" = "devops2"
      "repo3" = "devops3"
}
}

resource "github_repository" "repogithub" {
  for_each = var.repo-name
  name = "${each.value}-devopsschool-xyz"
}

each.key
each.value
Code language: JavaScript (javascript)

Provisonar

Provisonar
----------------------------
https://developer.hashicorp.com/terraform/language/resources/provisioners/syntax
<blockquote class="wp-embedded-content" data-secret="h4sWKPPe2s"><a href="https://www.devopsschool.com/blog/terraform-provisioners-tutorials-and-complete-guide/">Terraform provisioners Tutorials and Complete Guide</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“Terraform provisioners Tutorials and Complete Guide” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/terraform-provisioners-tutorials-and-complete-guide/embed/#?secret=gvq29J2R50#?secret=h4sWKPPe2s" data-secret="h4sWKPPe2s" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<blockquote class="wp-embedded-content" data-secret="7bQgkxl1z9"><a href="https://www.devopsschool.com/blog/terrafrom-example-code-for-remote-exec-provisioner/">Terrafrom – Example Code for remote-exec, local-exec & file provisioner</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“Terrafrom – Example Code for remote-exec, local-exec & file provisioner” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/terrafrom-example-code-for-remote-exec-provisioner/embed/#?secret=fLYHgC33x1#?secret=7bQgkxl1z9" data-secret="7bQgkxl1z9" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
file
remote-exec
local-exec


What is User Data and Custom data?
-------------------------------------
Ansible | Chef | Puppet? -----> Configuring servers



resource "aws_instance" "first-ec2" {
  ami           = "ami-053b0d53c279acc90" # us-west-2
  instance_type = "t2.micro"
  key_name 		= "ansiblesunday"
  tags = {
    Name = "RajeshKumar"
  }
  
  connection {
      type     = "ssh"
      user     = "ubuntu"
      private_key = file("ansiblesunday.pem")
      #host = aws_instance.web.public_ip
      host = self.public_ip
  }

  provisioner "local-exec" {
    command = "mkdir devopsschool-local"
  }
  
  provisioner "remote-exec" {
    inline = [
	  "sudo apt-get update",
      "sudo apt-get install apache2 -y",
	  "sudo systemctl start apache2",
    ]
  }
  
  provisioner "file" {
    source      = "providers.tf"
    destination = "/tmp/providers.tf"
  } 
}
Code language: HTML, XML (xml)

Module

===========================================
https://www.devopsschool.com/blog/terraform-modules-tutorials-and-complete-guide/
<blockquote class="wp-embedded-content" data-secret="niPm13lnnO"><a href="https://www.devopsschool.com/blog/terraform-modules-explained/">Terraform Modules explained!!!</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“Terraform Modules explained!!!” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/terraform-modules-explained/embed/#?secret=qougfaYxrZ#?secret=niPm13lnnO" data-secret="niPm13lnnO" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<blockquote class="wp-embedded-content" data-secret="m2ur3V0kqQ"><a href="https://www.devopsschool.com/blog/decide-factor-to-write-terraform-module-or-not/">Decide factor to write Terraform Module or not?</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“Decide factor to write Terraform Module or not?” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/decide-factor-to-write-terraform-module-or-not/embed/#?secret=SHrOzMh33i#?secret=m2ur3V0kqQ" data-secret="m2ur3V0kqQ" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<blockquote class="wp-embedded-content" data-secret="l7u31C0faC"><a href="https://www.devopsschool.com/blog/how-to-use-one-modules-variable-in-another-module-in-terraform/">How to use one module’s variable in another module in terraform?</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“How to use one module’s variable in another module in terraform?” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/how-to-use-one-modules-variable-in-another-module-in-terraform/embed/#?secret=o1RC97M7zq#?secret=l7u31C0faC" data-secret="l7u31C0faC" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
Dir
contains
main.tf
mod dir1
mod dir2
1.tf
2.tf
3.tf
tfvars
dir2 = app
1.tf
2.tf
3.tf
tfvars
dir3 == db
1.tf
2.tf
3.tf
tfvars
dir4 ==  vpc
1.tf
2.tf
3.tf
tfvars
==================================
ROOT MODULE
CHILE MODULE
===============================================
Develop your own Module
Use a Module dev by Someone else ------>
VPC
SUBNET
ROUTET
IGW
NATGW
SECGR
VPN
----------------
learn --> Code -> test -> USE It ENV
===========MAIN.TF=========
module "appserver" {
source = "./db"
}
module "dbserver" {
source = "./app"
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "my-rajesh"
cidr = "10.0.0.0/16"
azs             = ["us-east-1a", "us-east-1b", "us-east-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = false
enable_vpn_gateway = false
tags = {
Terraform = "true"
Environment = "dev"
}
}
Code language: JavaScript (javascript)
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x