1
- resource "aws_instance" "elasticsearch_instance" {
2
- count = " ${ var . instances_count } "
3
- depends_on = [" aws_ebs_volume.elasticsearch_volume" ]
4
- ami = " ${ var . ami_id } "
5
- instance_type = " ${ var . instance_type } "
6
- subnet_id = " ${ element (var. vpc_subnets , count. index )} "
7
- key_name = " ${ var . instance_key_name } "
8
- iam_instance_profile = " ${ aws_iam_instance_profile . elasticsearch . name } "
9
- vpc_security_group_ids = [" ${ concat (var. security_groups , list (aws_security_group. elasticsearch . id ))} " ]
10
- associate_public_ip_address = false
11
- source_dest_check = false
12
- disable_api_termination = " ${ var . enable_termination_protection } "
13
- instance_initiated_shutdown_behavior = " stop"
14
-
15
- tags {
16
- Env = " ${ var . env_name } "
17
- Name = " ${ var . env_name } : ${ var . verbose_name } Elasticsearch ${ count . index } "
18
- }
19
- user_data = << USER_DATA_END
20
- #cloud-config
21
- write_files:
22
- - path: /usr/bin/install-unix-tools
23
- encoding: b64
24
- content: ${ base64encode (file (" ${ path . module } /../resources/install-unix-tools.sh" ))}
25
- owner: root:root
26
- permissions: '0755'
27
- - path: /etc/dive-in-docker.conf
28
- content: elasticsearch
29
- - path: /etc/ecs/ecs.config
30
- content: |
31
- ECS_CLUSTER=${ var . ecs_cluster_name }
32
- ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","syslog","journald","gelf","awslogs"]
33
- - path: /etc/sysctl.d/01-elasticsearch.conf
34
- content: |
35
- :syslogtag, startswith, "${ var . syslog_tag_prefix } " /var/log/${ var . docker_log_file_name }
36
- runcmd:
37
- - [ cloud-init-per, once, "install-unix-tools", "install-unix-tools", "-t", "1.0", "full"]
38
- - [ cloud-init-per, once, "set-hostname", "aws-set-hostname", "${ lower (var. verbose_name )} -elasticsearch-{count.index}", "-s"]
39
- - [ cloud-init-per, once, "read-custom-syslog", "sysctl", "-p", "/etc/sysctl.d/01-elasticsearch.conf"]
40
- - [ cloud-init-per, once, "docker-stop", "service", "docker", "stop"]
41
- - [ cloud-init-per, once, "mount-ebs", "mount-ebs", "${ var . data_volume_device } ", "${ var . data_volume_path } ", "0777" ]
42
- - [ cloud-init-per, once, "docker-start", "service", "docker", "start"]
43
- - [ cloud-init-per, once, "start-ecs", "start", "ecs"]
44
- USER_DATA_END
45
- }
46
-
47
- resource "aws_ebs_volume" "elasticsearch_volume" {
48
- count = " ${ length (var. instances_count )} "
49
- availability_zone = " ${ element (var. availability_zones , count. index )} "
50
- size = " ${ var . storage_size } "
51
-
52
- tags {
53
- Env = " ${ var . env_name } "
54
- Name = " ${ var . env_name } : ${ var . verbose_name } Elasticseach Volume ${ count . index } "
55
- }
56
- }
57
-
58
- resource "aws_volume_attachment" "elasticsearch_volume_attachement" {
59
- count = " ${ length (var. instances_count )} "
60
- device_name = " ${ var . data_volume_device } "
61
- force_detach = true
62
- volume_id = " ${ element (aws_ebs_volume. elasticsearch_volume . * . id , count. index )} "
63
- instance_id = " ${ element (aws_instance. elasticsearch_instance . * . id , count. index )} "
64
- }
65
-
66
-
67
- resource "aws_security_group" "elasticsearch" {
68
- name = " ${ lower (var. env_name )} -${ lower (var. verbose_name )} -elasticsearch"
1
+ resource "aws_security_group" "elasticsearch_sg" {
2
+ name = " ${ lower (var. env_name )} -${ lower (var. verbose_name )} -elasticsearch-access"
69
3
vpc_id = " ${ var . vpc_id } "
70
4
71
5
# Elasticsearch native transport protocol
72
6
ingress {
73
7
from_port = 9300
74
8
to_port = 9300
75
9
protocol = " tcp"
76
- cidr_blocks = [" ${ var . native_trusted_networks } " ]
10
+ cidr_blocks = [" ${ var . trusted_networks } " ]
77
11
}
78
12
79
13
# Elasticsearch HTTP service
80
14
ingress {
81
15
from_port = 9200
82
16
to_port = 9200
83
17
protocol = " tcp"
84
- cidr_blocks = [" ${ var . http_trusted_networks } " ]
18
+ cidr_blocks = [" ${ var . trusted_networks } " ]
85
19
}
86
20
87
21
# Elasticsearch native transport protocol
88
22
egress {
89
23
from_port = 9300
90
24
to_port = 9300
91
25
protocol = " tcp"
92
- cidr_blocks = [" ${ var . native_trusted_networks } " ]
26
+ cidr_blocks = [" ${ var . trusted_networks } " ]
93
27
}
94
28
95
29
# Elasticsearch HTTP service
96
30
egress {
97
31
from_port = 9200
98
32
to_port = 9200
99
33
protocol = " tcp"
100
- cidr_blocks = [" ${ var . http_trusted_networks } " ]
34
+ cidr_blocks = [" ${ var . trusted_networks } " ]
101
35
}
102
36
103
37
tags {
104
38
Env = " ${ var . env_name } "
105
- Name = " ${ var . env_name } : ${ var . verbose_name } Elasticsearch"
39
+ Name = " ${ var . env_name } -${ var . verbose_name } -Elasticsearch-Access"
40
+ }
41
+ }
42
+
43
+ data "template_file" "elasticsearch_master_cloudconfig" {
44
+ template = " ${ file (" ${ path . module } /resources/userdata.tpl" )} "
45
+ vars {
46
+ configuration_script = " ${ base64encode (file (" ${ path . module } /resources/install-unix-tools.sh" ))} "
47
+ cluster_name = " ${ var . ecs_cluster_name } "
48
+ cluster_role = " elasticsearch-master"
49
+ host_name = " ${ lower (var. verbose_name )} -elasticsearch"
50
+ volume_device = " ${ var . data_volume_device } "
51
+ volume_path = " ${ var . data_volume_path } "
52
+ }
53
+ }
54
+
55
+ data "template_file" "elasticsearch_data_cloudconfig" {
56
+ template = " ${ file (" ${ path . module } /resources/userdata.tpl" )} "
57
+ vars {
58
+ configuration_script = " ${ base64encode (file (" ${ path . module } /resources/install-unix-tools.sh" ))} "
59
+ cluster_name = " ${ var . ecs_cluster_name } "
60
+ cluster_role = " elasticsearch-data"
61
+ host_name = " ${ lower (var. verbose_name )} -elasticsearch"
62
+ volume_device = " ${ var . data_volume_device } "
63
+ volume_path = " ${ var . data_volume_path } "
106
64
}
107
65
}
66
+
67
+ resource "aws_instance" "elasticsearch_master_instance" {
68
+ count = " ${ var . master_nodes_count } "
69
+ ami = " ${ var . instance_ami } "
70
+ instance_type = " ${ var . master_instance_type } "
71
+ subnet_id = " ${ element (var. vpc_subnets , count. index )} "
72
+ key_name = " ${ var . instance_key_name } "
73
+ iam_instance_profile = " ${ aws_iam_instance_profile . elasticsearch . name } "
74
+ vpc_security_group_ids = [" ${ concat (var. vpc_security_groups , list (aws_security_group. elasticsearch_sg . id ))} " ]
75
+ associate_public_ip_address = false
76
+ source_dest_check = false
77
+ disable_api_termination = " ${ var . enable_termination_protection } "
78
+ instance_initiated_shutdown_behavior = " stop"
79
+ user_data = " ${ data . template_file . elasticsearch_master_cloudconfig . rendered } "
80
+ tags {
81
+ Env = " ${ var . env_name } "
82
+ Name = " ${ var . env_name } -${ var . verbose_name } -Elasticsearch-Master-Zone${ count . index } "
83
+ }
84
+ }
85
+
86
+ resource "aws_instance" "elasticsearch_data_instance" {
87
+ count = " ${ var . data_nodes_count } "
88
+ depends_on = [" aws_ebs_volume.elasticsearch_data_volume" ]
89
+ ami = " ${ var . instance_ami } "
90
+ instance_type = " ${ var . data_instance_type } "
91
+ subnet_id = " ${ element (var. vpc_subnets , count. index )} "
92
+ key_name = " ${ var . instance_key_name } "
93
+ iam_instance_profile = " ${ aws_iam_instance_profile . elasticsearch . name } "
94
+ vpc_security_group_ids = [" ${ concat (var. vpc_security_groups , list (aws_security_group. elasticsearch_sg . id ))} " ]
95
+ associate_public_ip_address = false
96
+ source_dest_check = false
97
+ disable_api_termination = " ${ var . enable_termination_protection } "
98
+ instance_initiated_shutdown_behavior = " stop"
99
+ user_data = " ${ data . template_file . elasticsearch_data_cloudconfig . rendered } "
100
+ tags {
101
+ Env = " ${ var . env_name } "
102
+ Name = " ${ var . env_name } -${ var . verbose_name } -Elasticsearch-Data-Zone${ count . index } "
103
+ }
104
+ }
105
+
106
+ resource "aws_ebs_volume" "elasticsearch_data_volume" {
107
+ count = " ${ var . data_nodes_count } "
108
+ availability_zone = " ${ element (var. availability_zones , count. index )} "
109
+ size = " ${ var . data_instance_storage_size } "
110
+
111
+ tags {
112
+ Env = " ${ var . env_name } "
113
+ Name = " ${ var . env_name } -${ var . verbose_name } -Elasticseach-Volume-Zone${ count . index } "
114
+ }
115
+ }
116
+
117
+ resource "aws_ebs_volume" "elasticsearch_master_volume" {
118
+ count = " ${ var . master_nodes_count } "
119
+ availability_zone = " ${ element (var. availability_zones , count. index )} "
120
+ size = 10
121
+ tags {
122
+ Env = " ${ var . env_name } "
123
+ Name = " ${ var . env_name } -${ var . verbose_name } -Elasticseach-Volume-Zone${ count . index } "
124
+ }
125
+ }
126
+
127
+ resource "aws_volume_attachment" "elasticsearch_data_volume_attachement" {
128
+ count = " ${ var . data_nodes_count } "
129
+ device_name = " ${ var . data_volume_device } "
130
+ force_detach = true
131
+ volume_id = " ${ element (aws_ebs_volume. elasticsearch_data_volume . * . id , count. index )} "
132
+ instance_id = " ${ element (aws_instance. elasticsearch_data_instance . * . id , count. index )} "
133
+ }
134
+
135
+ resource "aws_volume_attachment" "elasticsearch_master_volume_attachement" {
136
+ count = " ${ var . master_nodes_count } "
137
+ device_name = " ${ var . data_volume_device } "
138
+ force_detach = true
139
+ volume_id = " ${ element (aws_ebs_volume. elasticsearch_master_volume . * . id , count. index )} "
140
+ instance_id = " ${ element (aws_instance. elasticsearch_master_instance . * . id , count. index )} "
141
+ }
142
+
143
+ data "aws_route53_zone" "local" {
144
+ zone_id = " ${ var . vpc_dns_zone_id } "
145
+ }
146
+
147
+ resource "aws_route53_record" "elasticsearch_master_node_dns_records" {
148
+ count = " ${ var . master_nodes_count } "
149
+ zone_id = " ${ var . vpc_dns_zone_id } "
150
+ name = " ${ var . master_nodes_count == 1 ? format (" elasticsearch.master.%s" , data. aws_route53_zone . local . name ) : format (" elasticsearch.master%d.%s" , count. index , data. aws_route53_zone . local . name )} "
151
+ type = " A"
152
+ ttl = " 60"
153
+ records = [" ${ element (aws_instance. elasticsearch_master_instance . * . private_ip , 0 )} " ]
154
+ }
155
+
156
+ resource "aws_route53_record" "elasticsearch_data_node_dns_records" {
157
+ count = " ${ var . data_nodes_count } "
158
+ zone_id = " ${ var . vpc_dns_zone_id } "
159
+ name = " ${ var . data_nodes_count == 1 ? format (" elasticsearch.%s" , data. aws_route53_zone . local . name ) : format (" elasticsearch%d.%s" , count. index , data. aws_route53_zone . local . name )} "
160
+ type = " A"
161
+ ttl = " 60"
162
+ records = [" ${ element (aws_instance. elasticsearch_data_instance . * . private_ip , 0 )} " ]
163
+ }
0 commit comments