繁体   English   中英

"如何使用 python 获取 ECS 集群内实例的 IP 地址?"

[英]How can I get the ip addresses of my instances inside the ECS Cluster using python?

import boto3 client = boto3.client('ecs') response = client.list_clusters() response1 = client.list_container_instances( cluster='Cluster1234', ) print(response, response1)

list_container_instances的响应为您提供了 containerInstanceArns 中的containerInstanceArns实例 ARN 列表。

然后,您可以将其作为containerInstances传递给describe_container_instances ,以在containerInstances[*].ec2InstanceId中获取容器实例及其底层 EC2 实例 ID 的列表。

然后,您可以将这些 EC2 实例 ID 作为InstanceIds传递给describe_instances ,这将为您提供它们的 IP 地址等。

可能有更简洁的方法可以做到这一点,但我并没有立即意识到这一点。

这是一个例子:

import boto3

ecs = boto3.client('ecs', region_name='us-east-1')
ec2 = boto3.client('ec2', region_name='us-east-1')

rc = ecs.list_clusters()

for cluster in rc['clusterArns']:
    ci = ecs.list_container_instances(cluster=cluster)

    if len(ci['containerInstanceArns']) > 0:
        r2 = ecs.describe_container_instances(
            cluster=cluster,
            containerInstances=ci['containerInstanceArns'])

        ids = [x['ec2InstanceId'] for x in r2['containerInstances']]

        r3 = ec2.describe_instances(InstanceIds=ids)

        for r in r3['Reservations']:
            for i in r['Instances']:
                print("{0}: instance {1}, state {2}, AMI {3}, private IP {4}, public IP {5}".format(
                    cluster.split('/')[-1],
                    i['InstanceId'],
                    i['State']['Name'],
                    i['ImageId'],
                    i['PrivateIpAddress'] if 'PrivateIpAddress' in i else 'n/a',
                    i['PublicIpAddress'] if 'PublicIpAddress' in i else 'n/a'))

这将产生如下输出:

cluster-101: instance i-01234e5ea85f30ba7, state running, AMI ami-045f1b3f87ed83659, private IP 10.0.0.222, public IP 54.166.303.1
cluster-101: instance i-023452ab72c755e01, state running, AMI ami-045f1b3f87ed83659, private IP 10.0.1.333, public IP 54.166.202.2
cluster-101: instance i-03456645cc5d9b19d, state running, AMI ami-045f1b3f87ed83659, private IP 10.0.1.444, public IP 54.166.101.3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM