如何使用boto3找到ec2实例的reservation_id

时间:2016-04-07 22:08:38

标签: boto3 aws-ec2

原因:我正在处理类似于AWS提供的预订利用率报告(但不同)的报告

我有我的实例列表 我有我的预订清单 我想把它们联系起来。我知道许多实例可能共享相同的保留。但我应该能够链接它们,但只有我知道特定实例的reservation_id。但是......如何获取实例的reservation_id ????检查了文档,只能找到cmd行工具来获取此信息。

一些代码

import boto3
client = boto3.client('ec2')
region = "us-east-1"  
ec2 = boto3.resource("ec2", region_name=region)  
ec2_list = list()
for instance in ec2.instances.all():
    name = 'Un-named'
    for tag in instance.tags:
        if tag['Key'].upper() == 'NAME':
            name = tag['Value']   # nothing called tag['reservation_id']
ec2_list.append((name, instance.id, instance.public_dns_name,
                 instance.placement['AvailabilityZone'],
                 instance.instance_type))

reservations = client.describe_reserved_instances()

1 个答案:

答案 0 :(得分:1)

import boto3
ec2 = boto3.client("ec2") 
response = ec2.describe_instances() 

for each_reservation in response["Reservation"]: 
    for each_instance in each_reservation["Instances"])
        print("Reserved_id:{}\tinstance_id:{}".format(
            each_reservation["ReservationId"],
            each_instance["InstanceId"])) 

(更新) 我刚刚意识到OP可能会询问映射reserved instances信息并与正在运行的实例相关联。实例ReservationId实际上与保留实例无关。

不幸的是,这非常复杂。因为AWS会自动汇集与实际容量和可用区域匹配的预留实例的使用情况。当预留实例耗尽时,计费将从典型的按需实例开始。

因此,有很多基于过渡的混合匹配计费。例如:

  1. 您只需在us-west-1中启动EC2 c4.large,运行3天(0.105 x 3 24)
  2. 满足容量,现在您想将其用于生产。您只需在us-west-1中为c4.large创建预留实例请求,预付1年($ 576)。
  3. 在今年年中,在us-west-1下的另一个c4.large创建了12个小时。你会按要求的费率收费。
  4. 然后关闭以前的EC2。预留实例计费将自动“应用”到具有确切容量的新EC2。
  5. 正如您所注意到的,目前无法与boto3进行实时动态关联。

    由于预付款,人们想要检查保留未使用,有人已经创建了一个boto包:check any idle reserved instances。这个软件包很方便,因为有些用户可能会为一个AZ中的预留实例付费,但却意外地将EC2放在另一个AZ等中。

    (以下部分为历史阅读保留)

    boto3.client(“ec2”)。describe_instances()和boto3.resource(“ec2”)。instancess.filter()将完成这项工作。只需选择其中一个。无需预订处理。 http://boto3.readthedocs.org/en/latest/reference/services/ec2.html#EC2.Client.describe_instances

    除非您使用“MaxResults”和“NextToken”来控制输出,否则describe_instances()将显示所有实例。

    如果您查看boto3 doc,他们会告诉您。 http://boto3.readthedocs.org/en/latest/guide/migrationec2.html

    注意:我只是在这里列出了一个代码来列出所有实例:To check whether AWS instance is up after reboot using python