如何获取仅运行列表?

时间:2016-06-01 11:34:27

标签: amazon-web-services boto3

我只需要从AWS获得RUNNING IP,该功能仅提取列为EIP的IP,其中包括非关联IP。

def gather_public_ip():
   ACCESS_KEY = config.get('aws','access_key')
   SECRET_KEY = config.get('aws','secret_key')
   regions = ['ap-northeast-1']
   all_EIP = []
   for region in regions:
      client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,)
      addresses_dict = client.describe_addresses()
      for eip_dict in addresses_dict['Addresses']:
          print eip_dict['PublicIp']

          return eip_dict['PublicIp']

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:0)

您可以通过以下查询获得

  • 获取运行实例的专用IP列表

aws ec2 describe-instances --filters "Name=instance-state-code, Values=16" --query "Reservations[*].Instances[*].PrivateIpAddress" --output text

  • 获取运行实例的公共IP列表

aws ec2 describe-instances --filters "Name=instance-state-code, Values=16" --query "Reservations[*].Instances[*].PublicIpAddress" --output text

要转换为python代码,您可以执行类似

的操作
response = client.describe_instances(
    Filters=[
        {
            'Name': 'instance-state-code',
            'Values': [
                '16',
            ]
        },
    ],)

然后,您需要阅读有关Reservations[*].Instances[*].PrivateIpAddressReservations[*].Instances[*].PublicIPAddress

的JSON输出

instance-state-code的定义/可能值为

  

实例的状态,为16位无符号   整数。高字节是一个不透明的内部值,应该是   忽略。基于所表示的状态设置低字节。有效   值为:0(挂起),16(运行),32(关闭),48   (终止),64(停止)和80(停止)。

答案 1 :(得分:0)

如下所示,您需要通过查看预留/实例数据来过滤掉正在运行的实例。我还添加了一个检查主机是否有公共IP

e = client.describe_instances()
for r in e['Reservations']:
    if r['Instances'][0]['State']['Name'] == 'running'\
    and 'PublicIpAddress' in r['Instances'][0]:
        print r['Instances'][0]['PublicIpAddress']

答案 2 :(得分:0)

关联的EIP将具有相应的PrivateIpAddress。如果没有关联EIP,则eip_dict将没有PrivateIpAddress。所以只需在代码中添加一个额外的检查:

  for eip_dict in addresses_dict['Addresses']:
      if 'PrivateIpAddress' in eip_dict:
          print eip_dict['PublicIp']

这将打印所有关联的弹性IP地址 - 无论实例是否正在运行。如果您真的只想要运行实例的弹性IP地址,那么您必须应用另一个过滤器。使用Vorsprung提出的解决方案来获取正在运行的实例并过滤列表。