2013-08-02 2 views
0

우리의 EC2 인스턴스에서 DNS가 손상된 경우에도이 머신이 100 %의 시간 동안 EC2 인스턴스인지 여부를 알려주는 Ruby 함수가 필요합니다. 우리가 사용하고내 컴퓨터가 EC2 인스턴스인지 여부를 어떻게 알 수 있습니까?

기능이었다 : 그 제외

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

는 DNS가 파산 할 때, 모든 EC2 기계는 그것이 EC2 기계되지 않았 음을 생각하고, 생산 기계가 삭제 등의 나쁜 일이 일어난 그 자신의 SSL 인증서에서와 파이썬에서

, 우리가 사용하고 .. 지역 develepment 상자의 인증서 표시로 대체 :

@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 

,468,222을 사용하는 것을 제외하고는, boto.utils.get_instance_metadata() 대신, 그게 효과가 있습니까?

+0

왜 아마존의 수영장 안에 IP가 있는지 확인하지 않아도 될까요? – taro

+0

작동하지 않습니다. 우리는 로컬 네트워크를 통제하지 않으며 우리의 로컬 박스에있는 아마존의 IP 공간에 거의 존재하지 않습니다. 그래도 좋은 생각. –

답변

1

그냥 호스트 파일에 넣으면 DNS에 대해 걱정할 필요가 없습니다.

하지만 실제로 ENV var를 사용하는 것이 더 바람직하지 않습니까?

관련 문제