2

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

有没有办法以编程方式发现它是否在 AWS 上运行?(也许使用博托?)

4

4 回答 4

3

如果你想严格使用 boto 来做到这一点,你可以这样做:

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

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

于 2013-06-08T16:23:56.220 回答
1

您可以轻松使用 AWS 开发工具包并检查实例 ID。除此之外,您可以查看 aws ip 范围 - 查看此链接 https://forums.aws.amazon.com/ann.jspa?annID=1701

于 2013-06-08T11:33:39.460 回答
0

我尝试了上述一些方法,当不在亚马逊上运行时,我无法访问 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. 
于 2014-07-26T19:58:28.270 回答
0

我找到了一种方法,使用:

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
于 2013-06-08T13:06:33.247 回答