-
Notifications
You must be signed in to change notification settings - Fork 141
/
Copy pathwebstack-with-loops-conditions.tf
103 lines (82 loc) · 2.12 KB
/
webstack-with-loops-conditions.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
provider "aws" {
region = "ap-south-1"
}
variable "environment" {
default = "production"
}
#security group start here
resource "aws_security_group" "instance" {
name = var.security_group_name
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"
}
data "template_file" "web-userdata" {
template = "${file("install_apache.sh")}"
}
resource "aws_instance" "web" {
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 = "web-example"
}
# condition syntax - condition ? true : false
# count = 2
count = "${var.environment == "development" ? 2 : 4}"
}
resource "aws_elb" "web" {
name = "web-elb"
availability_zones = ["ap-south-1a", "ap-south-1b"]
listener {
instance_port = 80
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
}
instances = "${aws_instance.web.*.id}"
cross_zone_load_balancing = true
}
#showing output of our stack
output "elb_address" {
value = "${aws_elb.web.dns_name}"
}
output "addresses" {
value = ["${aws_instance.web.*.public_ip}"]
}
/*
this will create complete web stack
with elb.
run
terraform validate
terraform plan
terraform apply
note down the elb dns name
go to aws dashboard to confirm all
resources
finally run
terraform destroy
*/