@@ -52,35 +52,63 @@ module "service-data" {
5252 iam_instance_profile_role_name = module. instance_profile . iam_role_name
5353}
5454
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+
5580# Create an ASG with just 1 EC2 instance
5681module "server" {
5782 source = " ../asg"
5883
59- ami = var. ami
60- azs = [local . az ]
61- elb_names = var. load_balancers
62- key_name = var. key_name
84+ ami = var. ami
85+ elb_names = var. load_balancers
86+ key_name = var. key_name
6387 # 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
88+ iam_profile = module. instance_profile . iam_profile_id
89+ instance_type = var. instance_type
90+ # 1 EC2 instance <> 1 EBS volume
91+ max_nodes = 1
92+ min_nodes = 1
93+ placement_group = var. placement_group
94+ public_ip = var. public_ip
7195 # the prefix and suffix names are combined in
7296 # the `asg` module to create the full name
73- name_prefix = var. name_prefix
74- name_suffix = " ${ var . name_suffix } -${ local . az } "
75-
97+ name_prefix = var. name_prefix
98+ name_suffix = " ${ var . name_suffix } -${ local . az } "
7699 root_volume_type = var. root_volume_type
77100 root_volume_size = var. root_volume_size
78101 security_group_ids = var. security_group_ids
79102 subnet_ids = [var . subnet_id ]
80103
81104 user_data = << END_INIT
82105#!/bin/bash
106+ apt update
83107${ var . init_prefix }
108+ ${ module . init-install-awscli . init_snippet }
109+ 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
110+ sleep 1
111+ done
84112${ module . init-attach-ebs . init_snippet }
85113${ var . init_suffix }
86114END_INIT
@@ -89,7 +117,13 @@ END_INIT
89117
90118# Render init snippet - boxed module to attach the EBS volume to the node
91119module "init-attach-ebs" {
92- source = " ../init-snippet-attach-ebs-volume"
93- region = var. region
120+ source = " ../init-snippet-attach-ebs-volume"
121+ region = var. region
94122 volume_id = module. service-data . volume_id
95123}
124+
125+ module "init-install-awscli" {
126+ source = " ../init-snippet-install-awscli"
127+ }
128+
129+
0 commit comments