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

Jam*_*hon 5 amazon-ec2 amazon-web-services

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

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

Séb*_*acq 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
Run Code Online (Sandbox Code Playgroud)

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

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

--Seb

  • 对于想要在ASG中找到任何给定实例的私有IP的任何人,将上面的`--query Reservations [].Instances [].PublicIpAddress`更改为`--query Reservations [] .Instances [] .PrivateIpAddress`.就像魅力一样,感谢@Sebastien Stormacq (2认同)

Jam*_*hon -1

实际上我最终用 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()
Run Code Online (Sandbox Code Playgroud)

要旨

/sf/answers/881478041/的答案对于开发此脚本很有帮助。

  • 您不应将访问密钥和秘密密钥存储在配置文件中。Phyton SDK(也称为两者)在 ~/.aws/config 和 ~/.aws/credentials 中共享一个配置文件,并将自动使用它。如果您的代码来自 EC2 实例,请改用 EC2 角色和实例配置文件。 (2认同)