4

Pythonの「boto」モジュールを使用して、あるインスタンスから別のインスタンスにボリュームをコピーしようとしています。そのプロセスの一部は、インスタンスに接続されているボリュームを識別することです。この問題に取り組むにはいくつかの方法があります。たとえば、リスト内包表記を使用できます。

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()組み込みフィルタリングを使用する方法があるかどうか興味があります。たとえば、「Name」タグが特定のパターンに一致するインスタンスを検索する場合、次のように実行できます。

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によるフィルタリングが不可能ですか?

4

1 に答える 1

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のリストを提供することもできます。

于 2012-12-18T17:32:56.670 に答える