找出当前机器是否在python中的aws上

找出当前机器是否在python中的aws上,python,amazon-web-services,boto,Python,Amazon Web Services,Boto,我有一个python脚本,可以在aws机器上运行,也可以在其他机器上运行。 脚本的功能取决于它是否在AWS上 有没有办法通过编程发现它是否在AWS上运行?(可能使用boto?您可以轻松使用AWS SDK并检查实例id。 除此之外,您还可以查看aws ip范围-查看此链接 您可以轻松使用AWS SDK并检查实例id。 除此之外,您还可以查看aws ip范围-查看此链接 我找到了一种方法,使用: try: instance_id_resp = requests.get('http://169

我有一个python脚本,可以在aws机器上运行,也可以在其他机器上运行。 脚本的功能取决于它是否在AWS上


有没有办法通过编程发现它是否在AWS上运行?(可能使用boto?

您可以轻松使用AWS SDK并检查实例id。 除此之外,您还可以查看aws ip范围-查看此链接

您可以轻松使用AWS SDK并检查实例id。 除此之外,您还可以查看aws ip范围-查看此链接 我找到了一种方法,使用:

try:
    instance_id_resp = requests.get('http://169.254.169.254/latest/meta-data/instance-id')
    is_on_aws = True
except requests.exceptions.ConnectionError as e:
    is_on_awas = False
我找到了一种方法,使用:

try:
    instance_id_resp = requests.get('http://169.254.169.254/latest/meta-data/instance-id')
    is_on_aws = True
except requests.exceptions.ConnectionError as e:
    is_on_awas = False

如果您想严格使用boto来实现这一点,可以执行以下操作:

import boto.utils
md = boto.utils.get_instance_metadata(timeout=.1, num_retries=0)

超时指定HTTP客户端在超时前等待响应的时间。
num\u retries
参数控制客户端在放弃并返回空字典之前重试请求的次数。

如果要严格使用boto执行此操作,可以执行以下操作:

import boto.utils
md = boto.utils.get_instance_metadata(timeout=.1, num_retries=0)

超时指定HTTP客户端在超时前等待响应的时间。
num_retries
参数控制客户端在放弃、返回和清空字典之前重试请求的次数。

我尝试了上面的一些方法,在不在Amazon上运行时,访问169.254.169.254时遇到问题。也许这与我不在美国有关

无论如何,这里有一段代码对我很有用:

def running_on_amazon():
  import urllib2
  import socket

  # I'm using curlmyip.com, but there are other websites that provide the same service 
  ip_finder_addr = "http://curlmyip.com" 
  f = urllib2.urlopen(ip_finder_addr)
  my_ip = f.read(100).strip()
  host_addr = socket.gethostbyaddr(my_ip)

  my_public_name = host_addr[0]
  amazon = (my_public_name.find("aws") >=0 )
  return amazon # returns a boolean value. 

我尝试了上面的一些方法,但在没有在Amazon上运行时,访问169.254.169.254时遇到了问题。也许这与我不在美国有关

无论如何,这里有一段代码对我很有用:

def running_on_amazon():
  import urllib2
  import socket

  # I'm using curlmyip.com, but there are other websites that provide the same service 
  ip_finder_addr = "http://curlmyip.com" 
  f = urllib2.urlopen(ip_finder_addr)
  my_ip = f.read(100).strip()
  host_addr = socket.gethostbyaddr(my_ip)

  my_public_name = host_addr[0]
  amazon = (my_public_name.find("aws") >=0 )
  return amazon # returns a boolean value. 
仅供参考,较早版本的boto(例如Ubuntu Precise上的
python boto
v2.2.2)不支持
timeout
num\u retries
参数。仅供参考,较早版本的boto(例如Ubuntu Precise上的
python boto
v2.2.2)不支持
timeout
num\u retries
参数。