Let's pretend I have an AWS EIP allocated as: eipalloc-94eb5af1 Let's pretent I have an AWS Network Interface: eni-e3d20a9a, eni-e3d20a9a
Let's now pretent I have two EC2 servers. The network interfaces are on those two servers.
Now...let's suppose I wanted to setup monitoring. Ping monitoring perhaps. If eni-e3d20a9a becomes invisible, I wish to transfer the EIP to eni-e3d20a9a.
This can be easily accomplished by:
aws ec2 associate-address --allocation-id eipalloc-03d3b666 \
--allow-reassociation --network-interface-id eni-98e03bd3
Also, setup of a rudimentary bash script on each server to monitor each other is rather simple.
But, I need advice on doing this efficiently on AWS. Not with a script Perhaps with Lambda or Cloudwatch?
What is the best way to accomplish the EIP move?
You are correct that you can monitor an instance and, in case of failure, re-associate an Elastic IP Address to a different instance or network interface.
There is no automatic facility to performing this monitoring/switching for you. You could monitor your instance from a script on an EC2 instance, from a scheduled AWS Lambda function or even from a computer anywhere on the Internet. However, you would be responsible for that script.
Alternatively, you could have the instances themselves send a custom metric to Amazon CloudWatch on a regular basis and then create an alarm that will trigger if the metric value changes (eg has not updated lately, indicating a potential system failure). The alarm could trigger an AWS Lambda function that would re-associate the Elastic IP address.
Or, another idea is to use Amazon Route 53 with a Health Check. If the Amazon Route 53 health checkers detect a problem, they can change the resolution of a DNS name to an alternate IP address. This is not re-associating an Elastic IP address. Rather, it is changing the IP address returned when a DNS name is resolved.