2012-12-18 5 views
4

파이썬의 'boto'모듈을 사용하여 한 인스턴스에서 다른 인스턴스로 볼륨을 복사하려고합니다. 이 프로세스의 일부는 인스턴스에 연결된 볼륨을 식별하는 것입니다. 이 문제에 접근하는 몇 가지 방법이 있습니다. 예를 들어 목록 이해력을 사용할 수 있습니다.boto에서 instance_id로 볼륨을 필터링 할 수 있습니까?

from boto.ec2 import connect_to_region 
conn = connect_to_region('us-east-1') 
all_volumes = conn.get_all_volumes() 
instance_volumes = [v for v in all_volumes if v.attach_data.instance_id = "<instanceID>"] 

이 방법이 효과적이며 제 목적에 부합합니다. 동일한 결과를 얻으려면 get_all_volumes()built-in filtering을 사용하는 방법이 있다면 모두 같은 생각입니다.

filters = {'tag:Name': '<name>'} 
reservations = self.conn.get_all_instances(filters=filters) 
instances = [i for r in reservations for i in r.instances] 

get_all_volumes() 비슷한 필터 매개 변수를 가지고,하지만 난 그게 boto.ec2.volume.Volume.attach_data.instance_id에 동작하지 않습니다 : 나는 누구의 "이름"태그 매치 특정 패턴을 인스턴스를 찾고 있다면 예를 들어, 나는이 작업을 수행 할 수 있습니다. 확실하지 않은 항목이 누락되었거나 볼륨에서 instance_id로 필터링 할 수 있습니까?

답변

11

예, 서버 측 필터를 사용하여 DescribeVolumes의 결과를 특정 인스턴스 ID에 연결된 볼륨으로 제한 할 수 있습니다.

from boto.ec2 import connect_to_region 
conn = connect_to_region('us-east-1') 

volumes = conn.get_all_volumes(filters={'attachment.instance-id': 'i-11111111'}) 

볼륨을 인스턴스에 연결된 볼륨으로 제한합니다 (i-11111111). 인스턴스 ID 목록을 사전의 값으로 제공 할 수도 있습니다.

관련 문제