首页 > 解决方案 > 如何在python中为aws boto3 ec2专用主机过滤字典数据

问题描述

我正在尝试编写一个 lambda 函数来解除分配专用主机

我需要帮助过滤 dict 数据

这是代码

import boto3 
client = boto3.client('ec2')
response = client.describe_hosts(Filters=[{'Name': 'state', 'Values': 
['available']}])
print(response)

以上返回dict数据(2个专用主机)..到目前为止我在网上看到的所有关于python的例子

这是什么主机>>> 它与 EC2 实例的 RESERVATION 非常相似

 {
  u'Hosts': [
    {
      u'HostId': 'h-0e9--some-ID',
      u'Tags': [

      ],
      u'HostProperties': {
        u'Cores': 36,
        u'TotalVCpus': 72,
        u'InstanceType': 'c5.large',
        u'Sockets': 2
      },
      u'Instances': [

      ],
      u'State': 'available',
      u'AvailabilityZone': 'us-east-1a',
      u'AvailableCapacity': {
        u'AvailableInstanceCapacity': [
          {
            u'AvailableCapacity': 36,
            u'InstanceType': 'c5.large',
            u'TotalCapacity': 36
          }
        ],
        u'AvailableVCpus': 72
      },
      u'AllocationTime': datetime.datetime(2019,
      1,
      24,
      4,
      30,
      48,
      tzinfo=tzlocal()),
      u'AutoPlacement': 'off'
    },
    {
      u'HostId': 'h-0e9--some-ID',
      u'Tags': [

      ],
      u'HostProperties': {
        u'Cores': 36,
        u'TotalVCpus': 72,
        u'InstanceType': 'c5.large',
        u'Sockets': 2
      },
      u'Instances': [

      ],
      u'State': 'available',
      u'AvailabilityZone': 'us-east-1a',
      u'AvailableCapacity': {
        u'AvailableInstanceCapacity': [
          {
            u'AvailableCapacity': 36,
            u'InstanceType': 'c5.large',
            u'TotalCapacity': 36
          }
        ],
        u'AvailableVCpus': 72
      },
      u'AllocationTime': datetime.datetime(2019,
      1,
      24,
      4,
      30,
      48,
      tzinfo=tzlocal()),
      u'AutoPlacement': 'off'
    }
  ],

我想使用输出来过滤 HostId 并声明“可用”并使用下面的 api 释放它们

response = client.release_hosts(
    HostIds=[
        'string',
    ]
)

简而言之,我想使用 python 描述主机,获取主机 ID 并提供主机 ID 给 release_host

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.release_hosts

我试图找到 describe_instance 和 start_instance 或 stop_instance 或 terminate_instance 的示例代码,但无法做到

对于 EC2 实例,有一些保留,对于专用主机,我注意到主机 .. 我不太明白这一点.. 请告诉我

典型的字典就像 my_dict = {'name':'Jack', 'age': 26}

对于 s3 > 它与上面的字典示例非常相似...对于 ec2 它令人困惑。

s3client = boto3.client('s3')
list_buckets_resp = s3client.list_buckets()
   for bucket in list_buckets_resp['Buckets']:
       print bucket

标签: python-3.xamazon-web-servicesamazon-ec2aws-lambdaboto3

解决方案


您的代码会返回满足您传递的过滤器的所有主机的列表以及有关每个主机的元数据信息。如果您只需要来自每个主机的 hostID 信息,您可以使用如下所示的内容

HostIds=[]
for host in response['Hosts']:
    HostIds.append(host['hostID'])

HostIds_string = ','.join(HostIds)

推荐阅读