如何判断我的机器是否是EC2实例?

时间:2013-08-02 21:59:51

标签: ruby amazon-web-services amazon-ec2

我需要一个Ruby函数,它会告诉我这台机器是否是一个EC2实例,100%的时间,即使我们的EC2实例上的DNS被破坏了。

我们使用的功能是:

def is_ec2?
  require 'socket'
  Socket::gethostbyname('instance-data.ec2.internal.')
  true
rescue
  false
end

除了当DNS崩溃时,每台EC2机器都认为它不是EC2机器,并且发生了不好的事情,例如生产机器删除了自己的SSL证书并用当地的开发盒证书替换它们。

在Python中,我们正在使用:

@memoized
def is_ec2():
    # This is a 99% check to avoid the need to wait for the timeout. 
    # Our VM's have this file.  Our dev VM's don't.  
    if not os.path.isfile('/sys/hypervisor/uuid'):
        return False

    try:
        result = boto.utils.get_instance_metadata()
        if result == {}:
            return False
        return True
    except Exception:
        return False

除了使用wget -q -O - http://169.254.169.254/latest/meta-data代替boto.utils.get_instance_metadata()外,还能运作吗?

1 个答案:

答案 0 :(得分:1)

只需将其放入您的主机文件中,您就不必担心DNS。

但实际上,使用ENV var是否更有意义?