如何获取 Auto scaling 组中实例的 IP

How to fetch IP of instances in an Auto scaling group

我一直在尝试获取我使用分页器列出并使用 print asg['AutoScalingGroupName']

打印的每个自动缩放组中所有实例的 IP 详细信息
import boto
import boto3

client = boto3.client('autoscaling', region_name='us-west-2')
autoscale = boto.connect_autoscale()
ec2 = boto.connect_ec2()
paginator = client.get_paginator('describe_auto_scaling_groups')
page_iterator = paginator.paginate(PaginationConfig={'PageSize': 100}
)

filtered_asgs = page_iterator.search(
    'AutoScalingGroups[] | [?contains(Tags[?Key==`{}`].Value, `{}`)]'.format('Application', 'CCP')
)

for asg in filtered_asgs:
    print asg['AutoScalingGroupName']
        group = autoscale.get_all_groups(asg['AutoScalingGroupName'])[0]
        instance_ids = [i.instance_id for i in group.instances]
        reservations = ec2.get_all_instances(instance_ids)
        instances = [i for r in reservations for i in r.instances]
        print instances

请帮我找出我在这里遗漏了什么。

此代码段应该有效,您只需添加您的特定过滤器:

#!/usr/bin/env python

import boto3

ec2 = boto3.resource('ec2')

def get_instances():
    client = boto3.client('autoscaling')
    paginator = client.get_paginator('describe_auto_scaling_groups')
    groups = paginator.paginate().build_full_result()

    for asg in groups['AutoScalingGroups']:
        print asg['AutoScalingGroupName']
        instance_ids = [i for i in asg['Instances']]
        running_instances = ec2.instances.filter(Filters=[{}])
        for instance in running_instances:
            print(instance.id, instance.public_dns_name, instance.private_ip_address)

if __name__ == '__main__':
    get_instances()

@Lorena,你的建议真的很有帮助。

我已经迭代正确过滤结果如下。

import boto3

ec2 = boto3.resource('ec2', region_name='us-west-2')

def get_instances():
        client = boto3.client('autoscaling', region_name='us-west-2')
        paginator = client.get_paginator('describe_auto_scaling_groups')
        groups = paginator.paginate(PaginationConfig={'PageSize': 100})
        #print groups
        filtered_asgs = groups.search('AutoScalingGroups[] | [?contains(Tags[?Key==`{}`].Value, `{}`)]'.format('Application', 'CCP'))

        for asg in filtered_asgs:
                print asg['AutoScalingGroupName']
                instance_ids = [i for i in asg['Instances']]
                running_instances = ec2.instances.filter(Filters=[{}])
                for instance in running_instances:
                        print(instance.private_ip_address)

if __name__ == '__main__':
    get_instances()

有点晚了,但这里我 post 我的版本。

我做这个是为了获取您通过调用 describe_auto_scaling_groups 获得的第一个自动缩放组的数据,进行相应的修改。

import boto3


ec2 = boto3.resource('ec2')
asg = boto3.client('autoscaling')

response= asg.describe_auto_scaling_groups(AutoScalingGroupNames=['myAutoScaleName',],)
groups=response.get("AutoScalingGroups")
instances=(groups[0].get('Instances'))

for i in instances:
    pubip=ec2.Instance(i.get('InstanceId')).public_ip_address
    print(pubip)