0

EC2 インスタンスで DNS が壊れている場合でも、このマシンが EC2 インスタンスであるかどうかを 100% の確率で教えてくれる Ruby 関数が必要です。

使用していた関数は次のとおりです。

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()、それは機能しますか?

4

1 に答える 1