1
+
2
+ # ##
3
+ # ## Terraform AWS Autoscaling
4
+ # ##
5
+
6
+ # Documentation references:
7
+ # https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html
8
+ # https://www.terraform.io/docs/providers/aws/r/autoscaling_attachment.html
9
+ # https://www.terraform.io/docs/providers/aws/r/autoscaling_lifecycle_hooks.html
10
+ # https://www.terraform.io/docs/providers/aws/r/autoscaling_notification.html
11
+ # https://www.terraform.io/docs/providers/aws/r/autoscaling_policy.html
12
+ # https://www.terraform.io/docs/providers/aws/r/autoscaling_schedule.html
13
+ # https://www.terraform.io/docs/providers/aws/r/launch_configuration.html
14
+
15
+ module "enabled" {
16
+ source = " devops-workflow/boolean/local"
17
+ version = " 0.1.1"
18
+ value = " ${ var . enabled } "
19
+ }
20
+
21
+ # Define composite variables for resources
22
+ module "label" {
23
+ source = " devops-workflow/label/local"
24
+ version = " 0.1.3"
25
+ organization = " ${ var . organization } "
26
+ name = " ${ var . name } "
27
+ namespace-env = " ${ var . namespace-env } "
28
+ namespace-org = " ${ var . namespace-org } "
29
+ environment = " ${ var . environment } "
30
+ delimiter = " ${ var . delimiter } "
31
+ attributes = " ${ var . attributes } "
32
+ tags = " ${ var . tags } "
33
+ }
34
+
1
35
# ######################
2
36
# Launch configuration
3
37
# ######################
4
38
resource "aws_launch_configuration" "this" {
5
- count = " ${ var . create_lc } "
39
+ count = " ${ module . enabled . value && var . launch_configuration == " " ? 1 : 0 } "
6
40
7
- name_prefix = " ${ coalesce (var. lc_name , var . name )} -"
41
+ name_prefix = " ${ coalesce (var. lc_name , module . label . id )} -"
8
42
image_id = " ${ var . image_id } "
9
43
instance_type = " ${ var . instance_type } "
10
44
iam_instance_profile = " ${ var . iam_instance_profile } "
@@ -14,50 +48,74 @@ resource "aws_launch_configuration" "this" {
14
48
user_data = " ${ var . user_data } "
15
49
enable_monitoring = " ${ var . enable_monitoring } "
16
50
placement_tenancy = " ${ var . placement_tenancy } "
17
- ebs_optimized = " ${ var . ebs_optimized } "
18
51
ebs_block_device = " ${ var . ebs_block_device } "
52
+ ebs_optimized = " ${ var . ebs_optimized } "
19
53
ephemeral_block_device = " ${ var . ephemeral_block_device } "
20
54
root_block_device = " ${ var . root_block_device } "
21
-
22
55
lifecycle {
23
56
create_before_destroy = true
24
57
}
25
-
58
+ # spot_price = "${var.spot_price == "0" ? "" : var.spot_price}"
26
59
# spot_price = "${var.spot_price}" // placement_tenancy does not work with spot_price
27
60
}
61
+ /*
62
+ # Attempt at improving the issue where it cannot delete the old LC on changes
63
+ resource "null_resource" "delay" {
64
+ # count = 10
65
+ depends_on = [
66
+ "aws_launch_configuration.this"
67
+ ]
68
+ triggers {
69
+ delay = "${aws_launch_configuration.this.name}"
70
+ }
71
+ lifecycle {
72
+ create_before_destroy = true
73
+ }
74
+ }
75
+ */
28
76
29
77
# ###################
30
78
# Autoscaling group
31
79
# ###################
32
80
resource "aws_autoscaling_group" "this" {
33
- count = " ${ var . create_asg } "
34
-
35
- name_prefix = " ${ coalesce (var. asg_name , var. name )} -"
36
- launch_configuration = " ${ var . create_lc ? element (aws_launch_configuration. this . * . name , 0 ) : var . launch_configuration } "
37
- vpc_zone_identifier = [" ${ var . vpc_zone_identifier } " ]
38
- max_size = " ${ var . max_size } "
39
- min_size = " ${ var . min_size } "
40
- desired_capacity = " ${ var . desired_capacity } "
81
+ /* depends_on = [
82
+ "null_resource.delay"
83
+ ]*/
84
+ count = " ${ module . enabled . value } "
85
+ name_prefix = " ${ coalesce (var. asg_name , module. label . id )} -"
86
+ launch_configuration = " ${ var . launch_configuration == " " ? element (aws_launch_configuration. this . * . name , 0 ) : var . launch_configuration } "
87
+ vpc_zone_identifier = [" ${ var . vpc_zone_identifier } " ]
88
+ max_size = " ${ var . max_size } "
89
+ min_size = " ${ var . min_size } "
90
+ desired_capacity = " ${ var . desired_capacity } "
41
91
42
92
load_balancers = [" ${ var . load_balancers } " ]
43
93
health_check_grace_period = " ${ var . health_check_grace_period } "
44
94
health_check_type = " ${ var . health_check_type } "
45
95
46
- min_elb_capacity = " ${ var . min_elb_capacity } "
47
- wait_for_elb_capacity = " ${ var . wait_for_elb_capacity } "
48
- target_group_arns = [" ${ var . target_group_arns } " ]
96
+ # availability_zones = ["${var.availability_zones}"]
49
97
default_cooldown = " ${ var . default_cooldown } "
50
- force_delete = " ${ var . force_delete } "
51
- termination_policies = " ${ var . termination_policies } "
52
- suspended_processes = " ${ var . suspended_processes } "
53
- placement_group = " ${ var . placement_group } "
54
98
enabled_metrics = [" ${ var . enabled_metrics } " ]
99
+ force_delete = " ${ var . force_delete } "
55
100
metrics_granularity = " ${ var . metrics_granularity } "
56
- wait_for_capacity_timeout = " ${ var . wait_for_capacity_timeout } "
101
+ min_elb_capacity = " ${ var . min_elb_capacity } "
102
+ placement_group = " ${ var . placement_group } "
57
103
protect_from_scale_in = " ${ var . protect_from_scale_in } "
104
+ suspended_processes = " ${ var . suspended_processes } "
105
+ target_group_arns = [" ${ var . target_group_arns } " ]
106
+ termination_policies = " ${ var . termination_policies } "
107
+ wait_for_capacity_timeout = " ${ var . wait_for_capacity_timeout } "
108
+ wait_for_elb_capacity = " ${ var . wait_for_elb_capacity } "
58
109
59
- tags = [" ${ concat (
60
- list (map (" key" , " Name" , " value" , var. name , " propagate_at_launch" , true )),
61
- var. tags
62
- )} " ]
110
+ tags = [" ${ concat (
111
+ list (
112
+ map (" key" , " Name" , " value" , module. label . id , " propagate_at_launch" , true ),
113
+ map (" key" , " Environment" , " value" , module. label . environment , " propagate_at_launch" , true ),
114
+ map (" key" , " Terraform" , " value" , " true" , " propagate_at_launch" , true )
115
+ ),
116
+ var. tags_ag
117
+ )} " ]
118
+ lifecycle {
119
+ create_before_destroy = true
120
+ }
63
121
}
0 commit comments