Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check application runs in AWS EC2 instance

How can I check which platform my app runs, AWS EC2 instance, Azure Role instance and non-cloud system? now I do that like this:

if(isAzure())
{
    //run in Azure role instance
}
else if(isAWS())
{
   //run in AWS EC2 instance
}
else
{
   //run in the non-cloud system
}

//checked whether it runs in AWS EC2 instance or not.
bool isAWS()
{
  string url = "http://instance-data";
  try
  {
     WebRequest req = WebRequest.Create(url);
     req.GetResponse();
     return true;
  }
  catch
  {
     return false;
  }  
}

but I have one problem when my apps runs in the non-cloud system, like local windows system. It got very slowly while executing isAWS() method. the code 'req.GetResponse()' takes a long time. so I want to know how can I to deal with it? please help me! thanks in advance.

like image 381
Jimmy Avatar asked Jun 06 '12 02:06

Jimmy


People also ask

What runs on EC2?

EC2 supports many OSes, including Linux, Microsoft Windows Server, CentOS and Debian.

What are status checks in an instance?

Instance Status checks detect problems within your instance. Typically, these are problems that you as a customer can fix, for example by rebooting the instance or making changes in your operating system.


1 Answers

The better way to do this would be to make a request to get instance metadata.

From the AWS Documentation:

To view all categories of instance metadata from within a running instance, use the following URI:

http://169.254.169.254/latest/meta-data/

On a Linux instance, you can use a tool such as cURL, or use the GET command, for example:

PROMPT> GET http://169.254.169.254/latest/meta-data/

Here's an example using the Python Boto wrapper:

from boto.utils import get_instance_metadata

m = get_instance_metadata()

if len(m.keys()) > 0:
    print "Running on EC2"

else:
    print "Not running on EC2"
like image 119
Raj Avatar answered Sep 19 '22 08:09

Raj