获取EC2自动缩放组中的实例列表?

时间:2014-03-20 13:58:19

标签: amazon-web-services amazon-ec2

是否有可用的实用程序或脚本从AWS EC2自动缩放组中检索所有实例的列表?

我需要一个动态生成的生产实例列表来挂钩我们的部署过程。是否有现有工具或者这是我要编写脚本的东西?

7 个答案:

答案 0 :(得分:10)

这是一个bash命令,它将为您提供AutoScaling组中实例的IP地址列表。

for ID in $(aws autoscaling describe-auto-scaling-instances --region us-east-1 --query AutoScalingInstances[].InstanceId --output text);
do
aws ec2 describe-instances --instance-ids $ID --region us-east-1 --query Reservations[].Instances[].PublicIpAddress --output text
done

(如果您有多个AutoScaling组,可能需要调整区域和过滤)

从更高层面来看 - 我会质疑是否需要连接到AutoScaling组中的各个实例。 AutoScaling的动态特性将鼓励您完全自动化部署和管理流程。引用AWS客户:“如果需要ssh到您的实例,请更改部署过程”

- 的Seb

答案 1 :(得分:3)

AWS Command Line Interface中的describe-auto-scaling-groups命令与您正在寻找的内容类似。

编辑:获得实例ID后,可以使用describe-instances命令获取其他详细信息,包括公有DNS名称和IP地址。

答案 2 :(得分:3)

您可以使用describe-auto-scaling-instances cli命令,并查询自动缩放组名称。

示例:

  

aws autoscaling describe-auto-scaling-instances --region us-east-1   --query'AutoScalingInstances [?AutoScalingGroupName ==`YOUR_ASG`]' - 输出文本

希望有所帮助

答案 3 :(得分:0)

我实际上最终用Python编写了一个脚本,因为我觉得Python比Bash更舒服,

#!/usr/bin/env python

"""
ec2-autoscale-instance.py

Read Autoscale DNS from AWS

Sample config file,
{
    "access_key": "key",
    "secret_key": "key",
    "group_name": "groupName"
}
"""

from __future__ import print_function
import argparse
import boto.ec2.autoscale
try:
    import simplejson as json
except ImportError:
    import json

CONFIG_ACCESS_KEY = 'access_key'
CONFIG_SECRET_KEY = 'secret_key'
CONFIG_GROUP_NAME = 'group_name'


def main():
    arg_parser = argparse.ArgumentParser(description=
                                         'Read Autoscale DNS names from AWS')
    arg_parser.add_argument('-c', dest='config_file',
                            help='JSON configuration file containing ' +
                                 'access_key, secret_key, and group_name')
    args = arg_parser.parse_args()
    config = json.loads(open(args.config_file).read())
    access_key = config[CONFIG_ACCESS_KEY]
    secret_key = config[CONFIG_SECRET_KEY]
    group_name = config[CONFIG_GROUP_NAME]

    ec2_conn = boto.connect_ec2(access_key, secret_key)
    as_conn = boto.connect_autoscale(access_key, secret_key)

    try:
        group = as_conn.get_all_groups([group_name])[0]
        instances_ids = [i.instance_id for i in group.instances]
        reservations = ec2_conn.get_all_reservations(instances_ids)
        instances = [i for r in reservations for i in r.instances]
        dns_names = [i.public_dns_name for i in instances]
        print('\n'.join(dns_names))
    finally:
        ec2_conn.close()
        as_conn.close()


if __name__ == '__main__':
    main()

Gist

https://stackoverflow.com/a/12592543/20774的答案有助于开发此脚本。

答案 4 :(得分:0)

使用以下代码段整理出具有特定代码的ASG并列出其实例详细信息。

#!/usr/bin/python

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()

答案 5 :(得分:0)

使用aws-sdk gem v2的红宝石 首先创建ec2对象,如下所示:

ec2 = Aws :: EC2 :: Resource.new(region:'region',    凭证:Aws :: Credentials.new('IAM_KEY','IAM_SECRET')    )

instances = []

ec2.instances.each do |i|
   p "instance id---", i.id
   instances << i.id

结束

这将获取特定区域中的所有实例ID,并可以使用更多过滤器,例如ip_address。

答案 6 :(得分:0)

您还可以使用以下命令来获取私有IP地址,而无需进行任何jq / awk / sed / cut

$ aws autoscaling describe-auto-scaling-instances --region us-east-1 --output text \
--query "AutoScalingInstances[?AutoScalingGroupName=='ASG-GROUP-NAME'].InstanceId" \
| xargs -n1 aws ec2 describe-instances --instance-ids $ID --region us-east-1 \
--query "Reservations[].Instances[].PrivateIpAddress" --output text

礼貌this