原因:我正在处理类似于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()
答案 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会自动汇集与实际容量和可用区域匹配的预留实例的使用情况。当预留实例耗尽时,计费将从典型的按需实例开始。
因此,有很多基于过渡的混合匹配计费。例如:
正如您所注意到的,目前无法与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