@@ -2,6 +2,8 @@ data "aws_vpc" "vpc" {
2
2
id = " ${ var . vpc_id } "
3
3
}
4
4
5
+ data "aws_region" "current" {}
6
+
5
7
data "aws_ami_ids" "ami" {
6
8
owners = [" amazon" ]
7
9
@@ -11,6 +13,21 @@ data "aws_ami_ids" "ami" {
11
13
}
12
14
}
13
15
16
+ resource "random_string" "admin_password" {
17
+ length = 32
18
+ special = false
19
+ }
20
+
21
+ resource "random_string" "rabbit_password" {
22
+ length = 32
23
+ special = false
24
+ }
25
+
26
+ resource "random_string" "secret_cookie" {
27
+ length = 64
28
+ special = false
29
+ }
30
+
14
31
data "aws_iam_policy_document" "policy_doc" {
15
32
statement {
16
33
actions = [" sts:AssumeRole" ]
@@ -27,22 +44,23 @@ data "template_file" "cloud-init" {
27
44
28
45
vars {
29
46
sync_node_count = 3
30
- region = " ${ var . region } "
31
- secret_cookie = " ${ var . rabbitmq_secret_cookie } "
32
- admin_password = " ${ var . admin_password } "
33
- rabbit_password = " ${ var . rabbit_password } "
34
- message_timeout = " ${ 3 * 24 * 60 * 60 * 1000 } " # 3 days
47
+ region = " ${ data . aws_region . current . name } "
48
+ admin_password = " ${ random_string . admin_password . result } "
49
+ rabbit_password = " ${ random_string . rabbit_password . result } "
50
+ secret_cookie = " ${ random_string . secret_cookie . result } "
51
+ message_timeout = " ${ 3 * 24 * 60 * 60 * 1000 } " # 3 days
35
52
}
36
53
}
37
54
38
55
resource "aws_iam_role" "role" {
39
- name = " rabbitmq"
56
+ name = " rabbitmq- ${ var . name } "
40
57
assume_role_policy = " ${ data . aws_iam_policy_document . policy_doc . json } "
41
58
}
42
59
43
60
resource "aws_iam_role_policy" "policy" {
44
- name = " rabbitmq"
45
- role = " ${ aws_iam_role . role . id } "
61
+ name = " rabbitmq-${ var . name } "
62
+ role = " ${ aws_iam_role . role . id } "
63
+
46
64
policy = << EOF
47
65
{
48
66
"Version": "2012-10-17",
63
81
}
64
82
65
83
resource "aws_iam_instance_profile" "profile" {
66
- name = " rabbitmq"
67
- role = " ${ aws_iam_role . role . name } "
84
+ name_prefix = " rabbitmq- ${ var . name } "
85
+ role = " ${ aws_iam_role . role . name } "
68
86
}
69
87
70
-
71
88
resource "aws_security_group" "rabbitmq_elb" {
72
- name = " rabbitmq_elb"
89
+ name = " rabbitmq_elb- ${ var . name } "
73
90
vpc_id = " ${ var . vpc_id } "
74
91
description = " Security Group for the rabbitmq elb"
75
92
76
- ingress {
77
- protocol = " tcp"
78
- from_port = 5672
79
- to_port = 5672
80
- security_groups = [" ${ var . elb_security_group_ids } " ]
81
- }
82
-
83
- ingress {
84
- protocol = " tcp"
85
- from_port = 80
86
- to_port = 80
87
- security_groups = [" ${ var . elb_security_group_ids } " ]
88
- }
89
-
90
93
egress {
91
94
protocol = " -1"
92
95
from_port = 0
@@ -95,12 +98,12 @@ resource "aws_security_group" "rabbitmq_elb" {
95
98
}
96
99
97
100
tags {
98
- Name = " rabbitmq elb "
101
+ Name = " rabbitmq ${ var . name } ELB "
99
102
}
100
103
}
101
104
102
105
resource "aws_security_group" "rabbitmq_nodes" {
103
- name = " rabbitmq-nodes"
106
+ name = " rabbitmq-${ var . name } - nodes"
104
107
vpc_id = " ${ var . vpc_id } "
105
108
description = " Security Group for the rabbitmq nodes"
106
109
@@ -125,42 +128,47 @@ resource "aws_security_group" "rabbitmq_nodes" {
125
128
security_groups = [" ${ aws_security_group . rabbitmq_elb . id } " ]
126
129
}
127
130
128
- ingress {
129
- protocol = " tcp"
130
- from_port = 22
131
- to_port = 22
132
- security_groups = [" ${ var . ssh_security_group_ids } " ]
133
- }
134
-
135
131
egress {
136
- protocol = " -1"
137
- from_port = 0
138
- to_port = 0
132
+ protocol = " -1"
133
+ from_port = 0
134
+ to_port = 0
135
+
139
136
cidr_blocks = [
140
- " 0.0.0.0/0"
137
+ " 0.0.0.0/0" ,
141
138
]
142
139
}
143
140
144
141
tags {
145
- Name = " rabbitmq nodes"
142
+ Name = " rabbitmq ${ var . name } nodes"
146
143
}
147
144
}
148
145
149
146
resource "aws_launch_configuration" "rabbitmq" {
150
- name = " rabbitmq"
147
+ name_prefix = " rabbitmq- ${ var . name } - "
151
148
image_id = " ${ data . aws_ami_ids . ami . ids [0 ]} "
152
149
instance_type = " ${ var . instance_type } "
153
150
key_name = " ${ var . ssh_key_name } "
154
- security_groups = [" ${ aws_security_group . rabbitmq_nodes . id } " ]
151
+ security_groups = [" ${ aws_security_group . rabbitmq_nodes . id } " , " ${ var . nodes_additional_security_group_ids } " ]
155
152
iam_instance_profile = " ${ aws_iam_instance_profile . profile . id } "
156
153
user_data = " ${ data . template_file . cloud-init . rendered } "
154
+
155
+ root_block_device {
156
+ volume_type = " ${ var . instance_volume_type } "
157
+ volume_size = " ${ var . instance_volume_size } "
158
+ iops = " ${ var . instance_volume_iops } "
159
+ delete_on_termination = true
160
+ }
161
+
162
+ lifecycle {
163
+ create_before_destroy = true
164
+ }
157
165
}
158
166
159
167
resource "aws_autoscaling_group" "rabbitmq" {
160
- name = " rabbitmq"
161
- max_size = " ${ var . count } "
162
- min_size = " ${ var . count } "
163
- desired_capacity = " ${ var . count } "
168
+ name_prefix = " rabbitmq- ${ var . name } - "
169
+ min_size = " ${ var . min_size } "
170
+ desired_capacity = " ${ var . desired_size } "
171
+ max_size = " ${ var . max_size } "
164
172
health_check_grace_period = 300
165
173
health_check_type = " ELB"
166
174
force_delete = true
@@ -169,27 +177,27 @@ resource "aws_autoscaling_group" "rabbitmq" {
169
177
vpc_zone_identifier = [" ${ var . subnet_ids } " ]
170
178
171
179
tag {
172
- key = " Name"
173
- value = " rabbitmq"
180
+ key = " Name"
181
+ value = " rabbitmq- ${ var . name } "
174
182
propagate_at_launch = true
175
183
}
176
184
}
177
185
178
186
resource "aws_elb" "elb" {
179
- name = " rabbit -elb"
187
+ name = " rabbitmq- ${ var . name } -elb"
180
188
181
189
listener {
182
- instance_port = 5672
183
- instance_protocol = " tcp"
184
- lb_port = 5672
185
- lb_protocol = " tcp"
190
+ instance_port = 5672
191
+ instance_protocol = " tcp"
192
+ lb_port = 5672
193
+ lb_protocol = " tcp"
186
194
}
187
195
188
196
listener {
189
- instance_port = 15672
190
- instance_protocol = " http"
191
- lb_port = 80
192
- lb_protocol = " http"
197
+ instance_port = 15672
198
+ instance_protocol = " http"
199
+ lb_port = 80
200
+ lb_protocol = " http"
193
201
}
194
202
195
203
health_check {
@@ -200,12 +208,12 @@ resource "aws_elb" "elb" {
200
208
target = " TCP:5672"
201
209
}
202
210
203
- subnets = [" ${ var . subnet_ids } " ]
204
- idle_timeout = 3600
205
- internal = true
206
- security_groups = [" ${ aws_security_group . rabbitmq_elb . id } " ]
211
+ subnets = [" ${ var . subnet_ids } " ]
212
+ idle_timeout = 3600
213
+ internal = true
214
+ security_groups = [" ${ aws_security_group . rabbitmq_elb . id } " , " ${ var . elb_additional_security_group_ids } " ]
207
215
208
216
tags {
209
- Name = " rabbitmq"
217
+ Name = " rabbitmq- ${ var . name } "
210
218
}
211
219
}
0 commit comments