Search code examples
amazon-web-servicesamazon-ec2aws-cloudformationamazon-vpc

Assign a static elastic IP to an instance in Autoscaling Group


I have one instance in ASG, I need to assign an elastic ip that instance. Now when the instance health check fails, the newly launched instance should have the same elastic IP. The IAM role and everything is in the correct order.


Solution

  •             INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
                MAXWAIT=3
                ALLOC_ID=${IPAddresses}
                echo "Checking if EIP with ALLOC_ID[$ALLOC_ID] is free...."
                ISFREE=$(aws ec2 describe-addresses --allocation-ids $ALLOC_ID --query Addresses[].InstanceId --output text --region ${AWS::Region})
                STARTWAIT=$(date +%s)
                while [ ! -z "$ISFREE" ]; do
                  if [ "$(($(date +%s) - $STARTWAIT))" -gt $MAXWAIT ]; then
                    echo "WARNING: We waited 30 seconds, we're forcing it now."
                    ISFREE=""
                  else
                    echo "Waiting for EIP with ALLOC_ID[$ALLOC_ID] to become free...."
                    sleep 3
                    ISFREE=$(aws ec2 describe-addresses --allocation-ids $ALLOC_ID --query Addresses[].InstanceId --output text --region ${AWS::Region})
                  fi
                done
                echo Running: aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --allow-reassociation --region ${AWS::Region}}
                aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --allow-reassociation --region ${AWS::Region}
                yum install  jq -y