Farid Ahmadian / DevOps

Terraform

Samples


Basic:

 # Don't forget to
 # export AWS_ACCESS_KEY_ID=(your access key id)
 # export AWS_SECRET_ACCESS_KEY=(your secret access key)

 provider "aws" {
   region = "eu-central-1"
   version = "~> 2.43"
 }
 variable "server_port" {
   description = "The port the server will use for HTTP requests"
   type        = number
   default     = 8080
 }
 resource "aws_security_group" "instance" {
   name = "terraform-example-instance"
   ingress {
     from_port   = var.server_port
     to_port     = var.server_port
     protocol    = "tcp"
     cidr_blocks = ["0.0.0.0/0"]
   }
 }
 resource "aws_instance" "example" {
   ami           = "ami-0cc0a36f626a4fdf5"
   instance_type = "t2.micro"
   vpc_security_group_ids = [aws_security_group.instance.id]
   user_data = <<-EOF
               #!/bin/bash
               echo "Hello, World" > index.html
               nohup busybox httpd -f -p ${var.server_port} &
               EOF
   tags = {
     Name = "terraform-example"
   }
 }
 output "public_ip" {
   value       = aws_instance.example.public_ip
   description = "The public IP of the web server" #https://www.terraform.io/docs/providers/aws/d/instance.html#public_ip
 }

Deploy a cluster of web servers

https://blog.gruntwork.io/an-introduction-to-terraform-f17df9c6d180

provider "aws" {
  region = "eu-central-1"
  version = "~> 2.43"
}
variable "server_port" {
  description = "The port the server will use for HTTP requests"
  type        = number
  default     = 8080
}
data "aws_availability_zones" "all" {}
resource "aws_security_group" "instance" {
  name = "terraform-example-instance"
  ingress {
    from_port   = var.server_port
    to_port     = var.server_port
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}
resource "aws_security_group" "elb" {
  name = "terraform-example-elb"  # Allow all outbound
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }  # Inbound HTTP from anywhere
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}
resource "aws_autoscaling_group" "example" {
  launch_configuration = aws_launch_configuration.example.id
  availability_zones   = data.aws_availability_zones.all.names

  min_size = 2
  max_size = 10 

  load_balancers    = [aws_elb.example.name]
  health_check_type = "ELB"

  tag {
    key                 = "Name"
    value               = "terraform-asg-example"
    propagate_at_launch = true
  }
}
resource "aws_elb" "example" { #Amazon’s Elastic Load Balancer (ELB)
  name               = "terraform-asg-example"
  security_groups    = [aws_security_group.elb.id]
  availability_zones = data.aws_availability_zones.all.names
health_check {
  target              = "HTTP:${var.server_port}/"
  interval            = 30
  timeout             = 3
  healthy_threshold   = 2
  unhealthy_threshold = 2
}
# This adds a listener for incoming HTTP requests.
listener {
  lb_port           = 80
  lb_protocol       = "http"
  instance_port     = var.server_port
  instance_protocol = "http"
}
}
resource "aws_launch_configuration" "example" {
  image_id        = "ami-0cc0a36f626a4fdf5"
  instance_type   = "t2.micro"
  security_groups = [aws_security_group.instance.id]
  user_data = <<-EOF
              #!/bin/bash
              echo "Hello, World" > index.html
              nohup busybox httpd -f -p "${var.server_port}" &
              EOF 
  lifecycle {
    create_before_destroy = true
  }
}
  output "clb_dns_name" {
    value       = aws_elb.example.dns_name
    description = "The domain name of the load balancer"
  }

Terraform 0.11 to 0.12

terraform11 0.12checklist
terraform12 0.12upgrade
terraform12 init

For automatic check:

LINE="*************************************************************************************************************"
ls | while read ARGS; do echo $ARGS; echo $LINE; terraform12 0.12upgrade $ARGS;done

BY: Farid Ahmadian
TAG: terraform
DATE: 2020-01-29 10:24:11


Farid Ahmadian / DevOps [ TXT ]

With many thanks and best wishes for dear Pejman Moghadam, someone who taught me alot in linux and life :)