如何在AWS Boto3 EC2专用主机的python中过滤字典数据

时间:2019-01-24 07:08:16

标签: python-3.x amazon-web-services amazon-ec2 aws-lambda boto3

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

我需要过滤字典数据的帮助

这是代码

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

1 个答案:

答案 0 :(得分:0)

您的代码返回满足您已通过的过滤器的所有主机的列表,以及有关每个主机的元数据信息。如果您需要的只是这些主机中每个主机的hostID信息,则可以使用以下内容

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

HostIds_string = ','.join(HostIds)