@@ -52,35 +52,59 @@ module "service-data" {
52
52
iam_instance_profile_role_name = module. instance_profile . iam_role_name
53
53
}
54
54
55
+ resource "aws_eip" "eip" {
56
+ count = var. assign_eip ? 1 : 0
57
+ }
58
+
59
+ resource "aws_iam_role_policy_attachment" "associate_eip" {
60
+ role = module. instance_profile . iam_role_name
61
+ policy_arn = aws_iam_policy. associate_eip_policy . arn
62
+ }
63
+
64
+ resource "aws_iam_policy" "associate_eip_policy" {
65
+ name = " associate_address"
66
+ policy = data. aws_iam_policy_document . associate_eip_policy_doc . json
67
+ }
68
+
69
+ data "aws_iam_policy_document" "associate_eip_policy_doc" {
70
+ statement {
71
+ sid = " "
72
+ effect = " Allow"
73
+ actions = [
74
+ " ec2:AssociateAddress"
75
+ ]
76
+ resources = [" *" ]
77
+ }
78
+ }
79
+
55
80
# Create an ASG with just 1 EC2 instance
56
81
module "server" {
57
82
source = " ../asg"
58
83
59
- ami = var. ami
60
- azs = [local . az ]
61
- elb_names = var. load_balancers
62
- key_name = var. key_name
63
- # The IAM Instance Profile w/ attach_ebs role
64
- iam_profile = module. instance_profile . iam_profile_id
65
- instance_type = var. instance_type
66
- # 1 EC2 instance <> 1 EBS volume
67
- max_nodes = 1
68
- min_nodes = 1
69
- placement_group = var. placement_group
70
- public_ip = var. public_ip
71
- # the prefix and suffix names are combined in
72
- # the `asg` module to create the full name
73
- name_prefix = var. name_prefix
74
- name_suffix = " ${ var . name_suffix } -${ local . az } "
75
-
84
+ ami = var. ami
85
+ elb_names = var. load_balancers
86
+ key_name = var. key_name
87
+ iam_profile = module. instance_profile . iam_profile_id
88
+ instance_type = var. instance_type
89
+ max_nodes = 1
90
+ min_nodes = 1
91
+ placement_group = var. placement_group
92
+ public_ip = var. public_ip
93
+ name_prefix = var. name_prefix
94
+ name_suffix = " ${ var . name_suffix } -${ local . az } "
76
95
root_volume_type = var. root_volume_type
77
96
root_volume_size = var. root_volume_size
78
97
security_group_ids = var. security_group_ids
79
98
subnet_ids = [var . subnet_id ]
80
99
81
100
user_data = << END_INIT
82
101
#!/bin/bash
102
+ apt update
83
103
${ var . init_prefix }
104
+ ${ module . init-install-awscli . init_snippet }
105
+ while ! ${ var . assign_eip ? " aws ec2 associate-address --instance-id \" $(ec2metadata --instance-id)\" --region \" ${ var . region } \" --allocation-id \" ${ element (aws_eip. eip . * . id , 0 )} \" " : " true" } ; do
106
+ sleep 1
107
+ done
84
108
${ module . init-attach-ebs . init_snippet }
85
109
${ var . init_suffix }
86
110
END_INIT
@@ -89,7 +113,13 @@ END_INIT
89
113
90
114
# Render init snippet - boxed module to attach the EBS volume to the node
91
115
module "init-attach-ebs" {
92
- source = " ../init-snippet-attach-ebs-volume"
93
- region = var. region
116
+ source = " ../init-snippet-attach-ebs-volume"
117
+ region = var. region
94
118
volume_id = module. service-data . volume_id
95
119
}
120
+
121
+ module "init-install-awscli" {
122
+ source = " ../init-snippet-install-awscli"
123
+ }
124
+
125
+
0 commit comments