cloudposse / terraform-aws-ec2-instance

Terraform module for provisioning a general purpose EC2 host
https://cloudposse.com/accelerate
Apache License 2.0
166 stars 220 forks source link

`associate_public_ip_address` triggers recreation if instance is stopped #121

Open syphernl opened 2 years ago

syphernl commented 2 years ago

Describe the Bug

Creating an instance using this module with the following flags:

  associate_public_ip_address = true
  assign_eip_address          = false

causes the instance to be recreated when it is stopped because the "public address" (not EIP) is released when the server is shutdown.

To prevent this from happening we could add a lifecycle configuration which ignores this particular key. Unfortunately this cannot be done on a module object within Terraform so it must be done from inside the module itself.

Expected Behavior

No instance re-creation.

Steps to Reproduce

Steps to reproduce the behavior:

  1. Create an instance with the above flags
  2. Stop the instance
  3. Re-run plan and see that it will be recreated
joelsdc commented 2 years ago

I run into this issue...

The workaround I'm using:

# Most of the time the server is off, this manually added data-resource
# avoids the need to constantly switch between on and off config.
data "aws_instance" "test_instance" {
  instance_id = "${the_instance_id}"
}

module "test_instance" {
  source = "cloudposse/ec2-instance/aws"
  version = "x.x.x"
  ...
  ...
  associate_public_ip_address = data.aws_instance.test_instance.instance_state == "running" ? true : false
  ...
  ...
}

This isn't pretty, but at least I can continue to run terraform regardless of the state of the VM.

Hope this helps! Joel.