【问题标题】:how to filter dictionary data in python for aws boto3 ec2 dedicated host如何在python中为aws boto3 ec2专用主机过滤字典数据
【发布时间】:2019-06-17 20:39:47
【问题描述】:

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

我需要帮助过滤 dict 数据

这里是代码

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

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

HOSTS 是什么>>> 它与 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 实例,有一些保留,对于专用主机,我注意到 Hosts.. 我不太明白这一点.. 请告诉我

典型的字典会像 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.x amazon-web-services amazon-ec2 aws-lambda boto3


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。欣赏...我如何将其存储为字符串..将您的代码存储为列表。我在将列表传递给 HostIds=[ 'string', 时遇到问题
    • 我已经编辑了答案。这将给出一个以逗号分隔的 hostID 列表。如果你想用空格分隔,只需用空格替换逗号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2018-01-27
    相关资源
    最近更新 更多