Terraform – Notes – Day 2 – August

DevOps

YOUR COSMETIC CARE STARTS HERE

Find the Best Cosmetic Hospitals

Trusted • Curated • Easy

Looking for the right place for a cosmetic procedure? Explore top cosmetic hospitals in one place and choose with confidence.

“Small steps lead to big changes — today is a perfect day to begin.”

Explore Cosmetic Hospitals Compare hospitals, services & options quickly.

✓ Shortlist providers • ✓ Review options • ✓ Take the next step with confidence

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