2013-06-18 2 views
3

파이썬에서 boto 모듈을 사용하여 빌드 할 수있는 간단한 스크립트를 만들려고합니다. 인스턴스를 만들고 종료 할 수있는 몇 가지 함수를 정의하고 싶습니다. 인스턴스 ID를 얻는 데 문제가 있습니다. 인스턴스 ID는 종료 부분에 필요합니다. get_all_instances() 속성에서 예약 ID를 얻을 수는 있지만 주어진 예약 ID를 가져 오는 쉬운 방법을 알 수 없으며 인스턴스 ID를 얻습니다.boto의 예약 ID에서 인스턴스 ID를 얻는 방법

고통스럽게 분명하지 않다면, 저는 파이썬을 처음 사용하고 다른 유형을 동일시하지 않을 것입니다.

예를 들어 예약 ID가 res = Reservation : r-xxxxxxx 인 경우 API 문서의 아무 곳에서나 인스턴스 ID를 호출하는 방법을 찾지 못했습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

답변

6

첫 번째 요점은 예약에 둘 이상의 인스턴스가 연결될 수 있다는 점입니다. 항상 일대일 매핑이 아닙니다. run_instances에 전화하여 둘 이상의 인스턴스를 생성하도록 요청하면 모두 동일한 예약에 연결됩니다.

get_all_instances 메서드를 사용한다고 가정 해보십시오. 이 메서드는 Reservation 객체의 목록을 반환합니다. 각 예약 객체에는 잠재적으로 여러 인스턴스 객체가 연관 될 수 있습니다. Reservation 객체는 그다지 유용하지 않으므로 일반적으로 Reservation 객체 목록을 Instance 객체 목록으로 바로 바꾸면됩니다. 이렇게하는 한 가지 방법은 다음과 같습니다

import boto.ec2 
conn = boto.ec2.connect_to_region('us-west-2') # or whatever region you want 
reservations = conn.get_all_instances() # could limit results with filters 
instances = [] 
for r in reservations: 
    instances.extend(r.instances) 

변수 instances 이제 인스턴스 개체의 목록이어야합니다. 각 인스턴스 개체에는 고유 한 인스턴스 ID가 포함 된 id이라는 특성이 있습니다. -하지만, 더 쉬운 방법이를 만들 수 있습니다

# same first three lines as above 
instances = [i for r in reservations for i in r.instances] 
+0

감사합니다. 그거야. 인스턴스 ID 만 직접 호출 할 수있는 방법이 없습니까? – numb3rs1x

+0

"인스턴스 ID 만 직접 호출"이라는 것이 무슨 뜻인지 확실치 않습니다. 인스턴스를 알아내는 유일한 방법은 DescribeInstances 요청 (get_all_instances 호출)이며 각 인스턴스 내에 하나 이상의 인스턴스가있는 Reservation 객체의 목록을 반환합니다. – garnaat

+0

주어진 매개 변수 집합을 기반으로 인스턴스를 시작하는 함수와 실행 함수의 반환을 받아 실행 함수에서 반환되는 함수를 종료 할 수있는 함수의 두 가지 함수를 만들고 싶습니다. 지금까지는 boto.ec2를 사용하여 인스턴스를 시작한 후 리턴되는 모든 것이 Reservation 객체입니다. 나는 종료 함수를 알리는 매개 변수로이를 어떻게 사용하는지 알아 내려고하고있다. 종료 호출에 인스턴스 ID가 필요하기 때문에 다른 인스턴스에서 ID를 가져 오려고합니다. – numb3rs1x

3

이 연산이 원하는 것을 아마되지 않습니다 : 같은 일을하고의

더 컴팩트 방법은 다음과 같이 중첩 된 지능형리스트를 사용하는 것 인스턴스를 시작할 때 인스턴스 오브젝트. 예 :

import boto.ec2 

conn = boto.ec2.connect_to_region("us-east-1") 

ins1 = conn.run_instances('ami-0axxxxxx', key_name='default', instance_type='t2.micro', security_group_ids=['sg-0c000000'], subnet_id='subnet-777777') 

instance = ins1.instances[0] 

print instance.id 
+0

나는이 방법이 더 깨끗하다고 ​​생각한다.) = –

+0

키 = 값 쌍을 잊어 버렸다. 감사. – Gready

관련 문제