4

botoを使用してLoadBalancerにあるすべてのインスタンスを取得したいのですが、どうすればそれを実現できますか?

これは私がこれまでに得たものです:

import boto
from boto.regioninfo import RegionInfo
from boto import ec2

ACCESS_KEY_ID = '*****'
SECRET_ACCESS_KEY = '********'

reg = RegionInfo(
    name='ap-southeast-1', 
    endpoint='elasticloadbalancing.ap-southeast-1.amazonaws.com')

conn = boto.connect_elb(
    aws_access_key_id=ACCESS_KEY_ID, 
    aws_secret_access_key=SECRET_ACCESS_KEY, 
    region=reg)

ec2_connection = boto.ec2.connection.EC2Connection(
    aws_access_key_id=ACCESS_KEY, 
    aws_secret_access_key=SECRET_ACCESS_KEY,
    region=reg)

instances = [ instance.id for instance in conn.get_all_load_balancers()[3].instances ] 
# instances is now [u'i-62448d36'], so far so good.
ec2_connection.get_all_instances(instances)

で終わる:

<ErrorResponse xmlns="http://webservices.amazon.com/AWSFault/2005-15-09">
  <Error>
    <Type>Sender</Type>
    <Code>InvalidAction</Code>
    <Message>Could not find operation DescribeInstances for version 2012-03-01</Message>
  </Error>
  <RequestId>c6aab70d-b22b-11e1-a990-a747bbde9f63</RequestId>
</ErrorResponse>

boto2.4.1を使用しています。

4

2 に答える 2

10

これは私が最終的に得たものです:

import boto
from boto import regioninfo
from boto import ec2

ACCESS_KEY_ID = '***********'
SECRET_ACCESS_KEY = '***********'

elb_region = boto.regioninfo.RegionInfo(
    name='ap-southeast-1', 
    endpoint='elasticloadbalancing.ap-southeast-1.amazonaws.com')

elb_connection = boto.connect_elb(
    aws_access_key_id=ACCESS_KEY_ID, 
    aws_secret_access_key=SECRET_ACCESS_KEY, 
    region=elb_region)

ec2_region = ec2.get_region(
    aws_access_key_id=ACCESS_KEY_ID,
    aws_secret_access_key=SECRET_ACCESS_KEY, 
    region_name='ap-southeast-1')

ec2_connection = boto.ec2.connection.EC2Connection(
    aws_access_key_id=ACCESS_KEY_ID, 
    aws_secret_access_key=SECRET_ACCESS_KEY,
    region=ec2_region)

load_balancer = elb_connection.get_all_load_balancers(load_balancer_names=['MediaPopClients'])[0]
instance_ids = [ instance.id for instance in load_balancer.instances ]
reservations = ec2_connection.get_all_instances(instance_ids)
instance_addresses = [ i.public_dns_name for r in reservations for i in r.instances ]

与える:

[u'ec2-46-137-194-58.ap-southeast-1.compute.amazonaws.com']

于 2012-06-09T14:21:04.667 に答える
4

私はこのようなものがうまくいくはずだと思います:

>>> import boto
>>> elb = boto.connect_elb()
>>> load_balancer = elb.get_all_load_balancers(['my_lb_name'])[0]
>>> for instance_info in load_balancer.instances:
...    print instance_info.id

LoadBalancerオブジェクトのinstances属性は、InstanceInfoオブジェクトのリストです。これらは実際のインスタンスオブジェクトではありませんが、インスタンスIDを持っているため、関連付けられているインスタンスオブジェクトを検索できます。

于 2012-06-08T21:18:46.130 に答える