1
- # Used to obtain availabilty zones when creating persistent storage.
2
- data "aws_subnet" "selected" {
3
- count = " ${ length (var. subnet_ids )} "
4
- id = " ${ var . subnet_ids [count . index ]} "
5
- }
6
-
7
1
# Create data nodes, equally distrubting them across specified subnets / AVs
8
2
resource "aws_instance" "data_node" {
9
- ami = " ${ var . ami } "
10
- instance_type = " ${ var . instance_type } "
11
- tags = " ${ merge (var. tags , map (" Name" , " ${ var . name } -data${ format (" %02d" , count. index + 1 )} " ), map (" Role" , " ${ replace (var. name , " -" , " _" )} _data" ), map (" Type" , " data" ))} "
12
- subnet_id = " ${ element (var. subnet_ids , count. index )} "
13
- key_name = " ${ var . key_name } "
14
- user_data = " ${ var . user_data == " " ? file (" ${ path . module } /files/init.sh" ) : var . user_data } "
15
- ebs_optimized = true
16
- vpc_security_group_ids = [" ${ concat (list (aws_security_group. influx_cluster . id , aws_security_group. data_node . id ), var. security_groups )} " ]
17
- count = " ${ var . data_instances } "
3
+ ami = var. ami
4
+ instance_type = var. instance_type
5
+ subnet_id = var. subnet_id
6
+ key_name = var. key_name
7
+ user_data = var. user_data == " " ? file (" ${ path . module } /init/data-nodes.sh" ) : var. user_data
8
+ ebs_optimized = true
9
+ vpc_security_group_ids = var. security_group
10
+ count = var. data_instances
18
11
}
19
12
20
13
resource "aws_ebs_volume" "data" {
21
- size = " ${ var . data_disk_size } "
22
- encrypted = true
23
- type = " io1"
24
- iops = " ${ var . data_disk_iops } "
25
- availability_zone = " ${ element (data. aws_subnet . selected . * . availability_zone , count. index )} "
26
- tags = " ${ var . tags } "
27
- count = " ${ var . data_instances } "
14
+ size = var. data_disk_size
15
+ encrypted = true
16
+ type = " io1"
17
+ iops = var. data_disk_iops
18
+ availability_zone = var. availabity_zone
19
+ count = var. data_instances
28
20
}
29
21
30
22
resource "aws_volume_attachment" "data_attachment" {
31
- device_name = " ${ var . data_disk_device_name } "
32
- volume_id = " ${ aws_ebs_volume . data . * . id [count . index ]} "
33
- instance_id = " ${ aws_instance . data_node . * . id [count . index ]} "
34
- count = " ${ var . data_instances } "
35
- force_detach = true
23
+ device_name = var. data_disk_device_name
24
+ volume_id = aws_ebs_volume. data . * . id [count . index ]
25
+ instance_id = aws_instance. data_node . * . id [count . index ]
26
+ count = var. data_instances
27
+ force_detach = true
36
28
}
37
29
38
-
39
30
# Creates all meta nodes in the first / same subnet, this avoids splits if one AV goes offline.
40
31
# Data nodes function fine without access to meta-nodes between shard creation.
41
- resource "aws_instance" "meta_node" {
42
- ami = " ${ var . ami } "
43
- instance_type = " t2.medium"
44
- tags = " ${ merge (var. tags , map (" Name" , " ${ var . name } -meta${ format (" %02d" , count. index + 1 )} " ), map (" Role" , " ${ replace (var. name , " -" , " _" )} _meta" ), map (" Type" , " data" ))} "
45
- subnet_id = " ${ element (var. subnet_ids ,0 )} "
46
- key_name = " ${ var . key_name } "
47
- user_data = " ${ var . user_data == " " ? file (" ${ path . module } /files/init.sh" ) : var . user_data } "
48
- vpc_security_group_ids = [" ${ concat (list (aws_security_group. influx_cluster . id ), var. security_groups )} " ]
49
- count = " ${ var . meta_instances } "
50
- }
32
+ resource "aws_instance" "meta_node" {
33
+ ami = var. ami
34
+ instance_type = " t2.medium"
35
+ subnet_id = var. subnet_id
36
+ key_name = var. key_name
37
+ user_data = var. user_data == " " ? file (" ${ path . module } /init/meta-nodes.sh" ) : var. user_data
38
+ vpc_security_group_ids = var. security_group
39
+ count = var. meta_instances
40
+ }
51
41
52
- resource "aws_ebs_volume" "meta" {
53
- size = " 100"
54
- encrypted = true
55
- type = " io1"
56
- iops = " 4000"
57
- availability_zone = " ${ data . aws_subnet . selected . 0 . availability_zone } "
58
- tags = " ${ var . tags } "
59
- count = " ${ var . meta_instances } "
60
- }
42
+ resource "aws_ebs_volume" "meta" {
43
+ size = " 100"
44
+ encrypted = true
45
+ type = " io1"
46
+ iops = var. data_disk_iops
47
+ availability_zone = var. availabity_zone
48
+ count = var. meta_instances
49
+ }
61
50
62
- resource "aws_volume_attachment" "meta" {
63
- device_name = " ${ var . meta_disk_device_name } "
64
- volume_id = " ${ aws_ebs_volume . meta . * . id [count . index ]} "
65
- instance_id = " ${ aws_instance . meta_node . * . id [count . index ]} "
66
- count = " ${ var . meta_instances } "
67
- force_detach = true
68
- }
51
+ resource "aws_volume_attachment" "meta" {
52
+ device_name = var. meta_disk_device_name
53
+ volume_id = aws_ebs_volume. meta . * . id [count . index ]
54
+ instance_id = aws_instance. meta_node . * . id [count . index ]
55
+ count = var. meta_instances
56
+ force_detach = true
57
+ }
69
58
70
59
resource "aws_route53_record" "meta_node" {
71
- zone_id = " ${ var . zone_id } "
72
- name = " ${ var . name } -meta${ format (" %02d" , count. index + 1 )} "
73
- type = " A"
74
- ttl = " 120"
75
- records = [" ${ element (aws_instance. meta_node . * . private_ip , count. index )} " ]
76
- count = " ${ var . meta_instances } "
77
- }
60
+ zone_id = var. zone_id
61
+ name = " ${ var . name } -meta${ format (" %02d" , count. index + 1 )} "
62
+ type = " A"
63
+ ttl = " 120"
64
+ records = [" ${ element (aws_instance. meta_node . * . private_ip , count. index )} " ]
65
+ count = var. meta_instances
66
+ }
78
67
79
- resource "aws_route53_record" "data_node" {
80
- zone_id = " ${ var . zone_id } "
81
- name = " ${ var . name } -data${ format (" %02d" , count. index + 1 )} "
82
- type = " A"
83
- ttl = " 120"
84
- records = [" ${ element (aws_instance. data_node . * . private_ip , count. index )} " ]
85
- count = " ${ var . data_instances } "
86
- }
68
+ resource "aws_route53_record" "data_node" {
69
+ zone_id = var. zone_id
70
+ name = " ${ var . name } -data${ format (" %02d" , count. index + 1 )} "
71
+ type = " A"
72
+ ttl = " 120"
73
+ records = [" ${ element (aws_instance. data_node . * . private_ip , count. index )} " ]
74
+ count = var. data_instances
75
+ }
87
76
88
77
89
78
# Setup inter-node cluster communications.
90
- resource "aws_security_group" "influx_cluster" {
91
- name = " ${ var . name } _cluster"
92
- description = " Rules required for an Influx Enterprise Cluster"
93
- tags = " ${ merge (var. tags , map (" Name" , " ${ var . name } " ), map (" Role" , " influx" ))} "
94
- vpc_id = " ${ var . vpc_id } "
95
- }
79
+ resource "aws_security_group" "influxdb_cluster" {
80
+ name = " ${ var . name } _cluster"
81
+ description = " Rules required for an Influx Enterprise Cluster"
82
+ vpc_id = " ${ var . vpc_id } "
83
+ }
96
84
97
- resource "aws_security_group_rule" "cluster_comms" {
98
- type = " ingress"
99
- from_port = 8088
100
- to_port = 8091
101
- protocol = " tcp"
102
- cidr_blocks = [ " ${ formatlist (" %s/32" , concat (aws_instance. meta_node . * . private_ip , aws_instance. data_node . * . private_ip ))} " ]
103
- security_group_id = " ${ aws_security_group . influx_cluster . id } "
104
- }
85
+ resource "aws_security_group_rule" "cluster_comms" {
86
+ type = " ingress"
87
+ from_port = 8088
88
+ to_port = 8091
89
+ protocol = " tcp"
90
+ cidr_blocks = " ${ formatlist (" %s/32" , concat (aws_instance. meta_node . * . private_ip , aws_instance. data_node . * . private_ip ))} "
91
+ security_group_id = " ${ aws_security_group . influxdb_cluster . id } "
92
+ }
105
93
106
94
resource "aws_security_group_rule" "outbound" {
107
- type = " egress"
108
- to_port = 0
109
- protocol = " -1"
110
- from_port = 0
111
- cidr_blocks = [" 0.0.0.0/0" ]
112
- security_group_id = " ${ aws_security_group . influx_cluster . id } "
113
- }
95
+ type = " egress"
96
+ to_port = 0
97
+ protocol = " -1"
98
+ from_port = 0
99
+ cidr_blocks = [" 0.0.0.0/0" ]
100
+ security_group_id = " ${ aws_security_group . influxdb_cluster . id } "
101
+ }
114
102
115
103
resource "aws_security_group" "data_node" {
116
- description = " Security group for influx data node ingress"
117
- vpc_id = " ${ var . vpc_id } "
118
- tags = " ${ merge (var. tags , map (" Name" , " ${ var . name } " ), map (" Role" , " influx" ))} "
119
-
120
- ingress {
121
- from_port = " 8086"
122
- to_port = " 8086"
123
- protocol = " tcp"
124
- cidr_blocks = [" 0.0.0.0/0" ]
125
- }
126
- }
104
+ description = " Security group for influx data node ingress"
105
+ vpc_id = var. vpc_id
106
+
107
+ ingress {
108
+ from_port = " 8086"
109
+ to_port = " 8086"
110
+ protocol = " tcp"
111
+ cidr_blocks = [" 0.0.0.0/0" ]
112
+ }
113
+ }
0 commit comments