-
Notifications
You must be signed in to change notification settings - Fork 130
/
cluster-webserver-with-asg-alb
139 lines (111 loc) · 3.1 KB
/
cluster-webserver-with-asg-alb
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
## step - 1 : CREATE SECURITY GROUP / EC2 / ALB / ASG
vim main.tf
-----------
# Configure the AWS provider
provider "aws" {
region = "ap-south-1"
}
# Data source: query the list of availability zones
data "aws_availability_zones" "all" {}
# Create a Security Group for an EC2 instance
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"]
}
lifecycle {
create_before_destroy = true
}
}
# Create a Security Group for an ELB
resource "aws_security_group" "elb" {
name = "terraform-example-elb"
vpc_id = "vpc-your-vpc-id"
description = "any comments to describe"
ingress {
from_port = 80
to_port = 80
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"]
}
}
# Create a Launch Configuration
resource "aws_launch_configuration" "example" {
image_id = "<your-ami-id>"
instance_type = "t2.micro"
security_groups = ["${aws_security_group.instance.id}"]
user_data = <<-EOF
#!/bin/bash
sudo yum install httpd -y
sudo echo "<h1>webserver with ASG & ALB </h1> " >> /var/www/html/index.html
sudo systemctl start httpd && systemctl enable httpd
EOF
lifecycle {
create_before_destroy = true
}
}
# Create an Autoscaling Group
resource "aws_autoscaling_group" "example" {
launch_configuration = "${aws_launch_configuration.example.id}"
availability_zones = ["${data.aws_availability_zones.all.names}"]
load_balancers = ["${aws_elb.example.name}"]
health_check_type = "ELB"
min_size = 2
max_size = 10
tag {
key = "Name"
value = "terraform-asg-example"
propagate_at_launch = true
}
}
# Create an ELB
resource "aws_elb" "example" {
name = "terraform-asg-example"
availability_zones = ["${data.aws_availability_zones.all.names}"]
security_groups = ["${aws_security_group.elb.id}"]
listener {
lb_port = 80
lb_protocol = "http"
instance_port = "${var.server_port}"
instance_protocol = "http"
}
health_check {
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 3
interval = 30
target = "HTTP:${var.server_port}/"
}
}
### ------ file ends here
### step -2 : CREATE OUTPUT FILE
vim outputs.tf
--------------
# Output variable: DNS Name of ELB
output "elb_dns_name" {
value = "${aws_elb.example.dns_name}"
}
### --- file ends here
### step - 3: CREATE VARIABLES
vim vars.tf
-----------
# Input variable: server port
variable "server_port" {
description = "The port the server will use for HTTP requests"
default = "8080"
}
#### WORKING INSTRUCTIONS ####
# terraform init
# Modify server port configuration.
# terraform plan -var 'server_port=8080'
# terraform apply -var 'server_port=8080'
# check it using - curl http://http://<elb_dns_name>/