Search code examples
amazon-ec2terraformterraform-provider-awsvpc

Attach Elastic IP To Multiple EC2 Instances In Terraform


I am trying to attach Elastic IP to multiple EC2 Instances using terraform. I have been able to create EC2 instances , VPC and Security groups but getting error while attaching Elastic IP's to EC2 instances.

Resource AWS_Instance

resource "aws_instance" "create_instance" {
  for_each               = toset(var.instance_type)  
  ami                    = var.ami
  instance_type          = each.value   
  vpc_security_group_ids = [aws_security_group.vpc-ssh.id, aws_security_group.vpc-web.id]  
  availability_zone      = var.availability_zone[index(var.instance_type,each.value)]

  tags = {
    "key" = each.value   
     } 
}

I am not able to decode how should the instance id be populated inside the elastic IP resource definition.

Create Elastic IP

resource "aws_eip" "my-eip" {   
  for_each = toset(var.instance_type)  
  instance = aws_instance.create_instance[???].id    // what should be used here
  vpc      = true   

  depends_on = [aws_internet_gateway.vpc-dev-igw] }

Solution

  • Since you are looping through the variable instance_type for both resources, you have to put each.value for referencing the EC2 instances:

    resource "aws_eip" "my-eip" {
      for_each   = toset(var.instance_type)
      instance   = aws_instance.create_instance[each.value].id
      vpc        = true
      depends_on = [aws_internet_gateway.vpc-dev-igw]
    }