1
+ locals {
2
+ instance_count = " ${ var . instance_enabled ? 1 : 0 } "
3
+ security_group_count = " ${ var . create_default_security_group ? 1 : 0 } "
4
+ region = " ${ var . region != " " ? var . region : data . aws_region . default . name } "
5
+ root_iops = " ${ var . root_volume_type == " io1" ? var . root_iops : " 0" } "
6
+ ebs_iops = " ${ var . ebs_volume_type == " io1" ? var . ebs_iops : " 0" } "
7
+ availability_zone = " ${ var . availability_zone != " " ? var . availability_zone : data . aws_subnet . default . availability_zone } "
8
+ ami = " ${ var . ami != " " ? var . ami : data . aws_ami . default . image_id } "
9
+ root_volume_type = " ${ var . root_volume_type != " " ? var . root_volume_type : data . aws_ami . info . root_device_type } "
10
+ }
11
+
12
+ data "aws_caller_identity" "default" {}
13
+
14
+ data "aws_region" "default" {
15
+ current = " true"
16
+ }
17
+
18
+ data "aws_subnet" "default" {
19
+ id = " ${ var . subnet } "
20
+ }
21
+
1
22
data "aws_iam_policy_document" "default" {
2
23
statement {
3
24
sid = " "
@@ -15,6 +36,29 @@ data "aws_iam_policy_document" "default" {
15
36
}
16
37
}
17
38
39
+ data "aws_ami" "default" {
40
+ most_recent = " true"
41
+
42
+ filter {
43
+ name = " name"
44
+ values = [" ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*" ]
45
+ }
46
+
47
+ filter {
48
+ name = " virtualization-type"
49
+ values = [" hvm" ]
50
+ }
51
+
52
+ owners = [" 099720109477" ]
53
+ }
54
+
55
+ data "aws_ami" "info" {
56
+ filter {
57
+ name = " image-id"
58
+ values = [" ${ local . ami } " ]
59
+ }
60
+ }
61
+
18
62
# Apply the tf_label module for this resource
19
63
module "label" {
20
64
source = " git::https://github.com/cloudposse/terraform-null-label.git?ref=tags/0.3.1"
@@ -23,12 +67,8 @@ module "label" {
23
67
name = " ${ var . name } "
24
68
attributes = " ${ var . attributes } "
25
69
delimiter = " ${ var . delimiter } "
26
- tags = " ${ var . tags } "
27
- }
28
-
29
- locals {
30
- instance_count = " ${ var . instance_enabled ? 1 : 0 } "
31
- security_group_count = " ${ var . create_default_security_group ? 1 : 0 } "
70
+ tags = " ${ merge (map (" AZ" , " ${ local . availability_zone } " ), var. tags )} "
71
+ enabled = " ${ local . instance_count ? " true" : " false" } "
32
72
}
33
73
34
74
resource "aws_iam_instance_profile" "default" {
@@ -38,40 +78,12 @@ resource "aws_iam_instance_profile" "default" {
38
78
}
39
79
40
80
resource "aws_iam_role" "default" {
41
- count = " ${ local . instance_count } "
42
- name = " ${ module . label . id } "
43
- path = " /"
44
-
81
+ count = " ${ local . instance_count } "
82
+ name = " ${ module . label . id } "
83
+ path = " /"
45
84
assume_role_policy = " ${ data . aws_iam_policy_document . default . json } "
46
85
}
47
86
48
- resource "aws_security_group" "default" {
49
- count = " ${ local . security_group_count } "
50
- name = " ${ module . label . id } "
51
- vpc_id = " ${ var . vpc_id } "
52
- description = " Instance default security group (only egress access is allowed)"
53
-
54
- tags {
55
- Name = " ${ module . label . id } "
56
- Namespace = " ${ var . namespace } "
57
- Stage = " ${ var . stage } "
58
- }
59
-
60
- egress {
61
- protocol = " -1"
62
- from_port = 0
63
- to_port = 0
64
-
65
- cidr_blocks = [
66
- " 0.0.0.0/0" ,
67
- ]
68
- }
69
-
70
- lifecycle {
71
- create_before_destroy = true
72
- }
73
- }
74
-
75
87
# Apply the tf_github_authorized_keys module for this resource
76
88
module "github_authorized_keys" {
77
89
source = " git::https://github.com/cloudposse/terraform-template-user-data-github-authorized-keys.git?ref=tags/0.1.2"
@@ -80,39 +92,36 @@ module "github_authorized_keys" {
80
92
github_team = " ${ var . github_team } "
81
93
}
82
94
83
- data "template_file" "user_data" {
84
- template = " ${ file (" ${ path . module } /user_data.sh" )} "
85
-
86
- vars {
87
- user_data = " ${ join (" \n " , compact (concat (var. user_data , list (module. github_authorized_keys . user_data ))))} "
88
- welcome_message = " ${ var . welcome_message } "
89
- ssh_user = " ${ var . ssh_user } "
90
- }
91
- }
92
-
93
95
resource "aws_instance" "default" {
94
- count = " ${ local . instance_count } "
95
- ami = " ${ var . ec2_ami } "
96
- instance_type = " ${ var . instance_type } "
97
-
98
- user_data = " ${ data . template_file . user_data . rendered } "
96
+ count = " ${ local . instance_count } "
97
+ ami = " ${ local . ami } "
98
+ availability_zone = " ${ local . availability_zone } "
99
+ instance_type = " ${ var . instance_type } "
100
+ ebs_optimized = " ${ var . ebs_optimized } "
101
+ disable_api_termination = " ${ var . disable_api_termination } "
102
+ user_data = " ${ data . template_file . user_data . rendered } "
103
+ iam_instance_profile = " ${ aws_iam_instance_profile . default . name } "
104
+ associate_public_ip_address = " ${ var . associate_public_ip_address } "
105
+ key_name = " ${ var . ssh_key_pair } "
106
+ subnet_id = " ${ var . subnet } "
107
+ monitoring = " ${ var . monitoring } "
108
+ private_ip = " ${ var . private_ip } "
109
+ source_dest_check = " ${ var . source_dest_check } "
110
+ ipv6_address_count = " ${ var . ipv6_address_count } "
111
+ ipv6_addresses = " ${ var . ipv6_addresses } "
99
112
100
113
vpc_security_group_ids = [
101
114
" ${ compact (concat (list (var. create_default_security_group ? join (" " , aws_security_group. default . * . id ) : " " ), var. security_groups ))} " ,
102
115
]
103
116
104
- iam_instance_profile = " ${ aws_iam_instance_profile . default . name } "
105
- associate_public_ip_address = " ${ var . associate_public_ip_address } "
106
-
107
- key_name = " ${ var . ssh_key_pair } "
108
-
109
- subnet_id = " ${ var . subnet } "
110
-
111
- tags {
112
- Name = " ${ module . label . id } "
113
- Namespace = " ${ var . namespace } "
114
- Stage = " ${ var . stage } "
117
+ root_block_device {
118
+ volume_type = " ${ local . root_volume_type } "
119
+ volume_size = " ${ var . root_volume_size } "
120
+ iops = " ${ local . root_iops } "
121
+ delete_on_termination = " ${ var . delete_on_termination } "
115
122
}
123
+
124
+ tags = " ${ module . label . tags } "
116
125
}
117
126
118
127
resource "aws_eip" "default" {
@@ -121,46 +130,26 @@ resource "aws_eip" "default" {
121
130
vpc = " true"
122
131
}
123
132
124
- # Restart dead or hung instance
125
- data "aws_region" "default" {
126
- current = true
127
- }
128
-
129
- data "aws_caller_identity" "default" {}
130
-
131
- resource "null_resource" "check_alarm_action" {
132
- count = " ${ local . instance_count } "
133
+ resource "null_resource" "eip" {
134
+ count = " ${ var . associate_public_ip_address && var . instance_enabled ? 1 : 0 } "
133
135
134
- triggers = {
135
- action = " arn:aws:swf: ${ data . aws_region . default . name } : ${ data . aws_caller_identity . default . account_id } : ${ var . default_alarm_action } "
136
+ triggers {
137
+ public_dns = " ec2- ${ replace (aws_eip . default . public_ip , " . " , " - " ) } . ${ local . region == " us-east-1 " ? " compute-1 " : " ${ local . region } .compute " } .amazonaws.com "
136
138
}
137
139
}
138
140
139
- resource "aws_cloudwatch_metric_alarm" "default" {
140
- count = " ${ local . instance_count } "
141
- alarm_name = " ${ module . label . id } "
142
- comparison_operator = " ${ var . comparison_operator } "
143
- evaluation_periods = " ${ var . evaluation_periods } "
144
- metric_name = " ${ var . metric_name } "
145
- namespace = " ${ var . metric_namespace } "
146
- period = " ${ var . applying_period } "
147
- statistic = " ${ var . statistic_level } "
148
- threshold = " ${ var . metric_threshold } "
149
- depends_on = [" null_resource.check_alarm_action" ]
150
-
151
- dimensions {
152
- InstanceId = " ${ aws_instance . default . id } "
153
- }
154
-
155
- alarm_actions = [
156
- " ${ null_resource. check_alarm_action . triggers . action } " ,
157
- ]
141
+ resource "aws_ebs_volume" "default" {
142
+ count = " ${ var . ebs_volume_count } "
143
+ availability_zone = " ${ local . availability_zone } "
144
+ size = " ${ var . ebs_volume_size } "
145
+ iops = " ${ local . ebs_iops } "
146
+ type = " ${ var . ebs_volume_type } "
147
+ tags = " ${ module . label . tags } "
158
148
}
159
149
160
- resource "null_resource" "eip" {
161
- count = " ${ var . associate_public_ip_address && var . instance_enabled ? 1 : 0 } "
162
-
163
- triggers {
164
- public_dns = " ec2-${ replace (aws_eip. default . public_ip , " ." , " -" )} .${ data . aws_region . default . name == " us-east-1" ? " compute-1" : " ${ data . aws_region . default . name } .compute" } .amazonaws.com"
165
- }
150
+ resource "aws_volume_attachment" "default" {
151
+ count = " ${ var . ebs_volume_count } "
152
+ device_name = " ${ element (var. ebs_device_name , count. index )} "
153
+ volume_id = " ${ element (aws_ebs_volume. default . * . id , count. index )} "
154
+ instance_id = " ${ aws_instance . default . id } "
166
155
}
0 commit comments