-
Notifications
You must be signed in to change notification settings - Fork 130
/
webserver-elb.tf
112 lines (95 loc) · 2.74 KB
/
webserver-elb.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
provider "aws" {
region = "ap-south-1"
}
data "template_file" "web-userdata" {
template = "${file("install_apache.sh")}"
}
# create first webserver - exampleone
resource "aws_instance" "exampleone" {
ami = "ami-0447a12f28fddb066"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.instance.id]
user_data = "${data.template_file.web-userdata.rendered}"
key_name = "zoomkey"
tags = {
Name = "exampleone"
}
}
#create second webserver - exampletwo
resource "aws_instance" "exampletwo" {
ami = "ami-0447a12f28fddb066"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.instance.id]
user_data = "${data.template_file.web-userdata.rendered}"
key_name = "zoomkey"
tags = {
Name = "exampletwo"
}
}
#security group start here
resource "aws_security_group" "instance" {
name = var.security_group_name
vpc_id = "vpc-your-vpc-id"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
#security group end here
variable "security_group_name" {
description = "The name of the security group"
type = string
default = "terraform-example-instance"
}
#creating elastic load balancer
resource "aws_elb" "morning-elb" {
name = "morning-elb"
availability_zones = ["ap-south-1a", "ap-south-1b"]
listener {
instance_port = 80
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
}
health_check {
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 5
target = "HTTP:80/"
interval = 35
}
instances = ["${aws_instance.exampleone.id}", "${aws_instance.exampletwo.id}"]
cross_zone_load_balancing = true
idle_timeout = 300
connection_draining = true
connection_draining_timeout = 300
tags = {
Name = "morning-webserver-elb"
}
}
/*
user data scripe install_apache.sh is in the repository
run
terraform validate
terraform plan
terraform apply
go to aws dashboard check two instances, load balancer
copy the dns name of load balancer, check in browser
the website should be visible.
finally destroy everything using
terraform destroy
*/