Monday, March 29, 2010

Ping Amazon EC2 Server Instances - How To

By default Amazon EC2 instances don't respond to ICMP requests, i.e. ping.  Of course there are several reasons why one may want to ping an Amazon EC2 instance, including verifying if it is online and to test latency.  As with most things there is more than one approach to this issue.

First, you could enable ICMP through Amazon security groups.  This can be done easily with the Amazon Management console, ElasticFox or EC2 command line tools.  You could open it up to the whole world:
ec2-authorize default -P icmp -t -1:-1 -s
. . . or, specific IP addresses or ranges:
ec2-authorize default -P icmp -t -1:-1 -s <IP Address>
Another approach would be to use TCPing (works with both Linux and Windows - see Ping Over TCP with tcping.exe in Windows or tcping for Linux).  I like to use this method because you can test general connectivity over specific ports.  For example you could use
tcping ec2-75-101-206-107.compute-1.amazonaws.com
to test connectivity to the specified server over the default port 80.  Or you could specify a port, like 22 for SSH or 3389 for RDP:
tcping ec2-75-101-206-107.compute-1.amazonaws.com 22
One method I use to determine when an EC2 instance that is first starting comes online, or when a restarting instance is again online (either from a reboot or bundling the EC2 instance), is to use tcping to send a ping continuously every second.  You could use the command:
tcping -t -i 1 ec2-75-101-206-107.compute-1.amazonaws.com
This very useful as you can essentially track the progress of the instance coming online, then becoming available.  At first you will receive the message, "Connection timed out. . ."  This indicates that tcping is not getting a response at all, i.e. that the instance cannot be reached.  Once the instance starts, but the OS isn't fully available the message, "Connection refused. . ." will be the result.  This means tcping can reach the machine (the network card and TCP/IP stack are available), however, the port you are probing, 80 in this case, isn't accepting connections.  Then, when it's available (on the specified port) it will respond with the message, "Port is open. . ."

I like to use the interval of 1 second as it is useful in determining how long an instance was offline and the duration of each stage.

For more info see the following posts.


  1. I have been trying to figure out how to ping my Amazon servers and couldn't get it to work. This did the trick. Thanks!

  2. This is awesome! I've been trying to figure out how to ping my EC2 servers for a while now.

  3. This is really helpful. Thank you powercram guy!

  4. powercram dude youre a rockstar!