【问题标题】:Pagination in boto3 ec2 describe instanceboto3 ec2中的分页描述实例
【发布时间】:2019-10-22 04:32:45
【问题描述】:
我在 boto3 中遇到了分页问题,并且没有在 aws 帐户中获取所有实例。
仅获得 50% 以下的实例(大约 2000 个,而有 4000 个)
下面是我的代码
import boto3
ec2 = boto3.client('ec2')
paginator = ec2.get_paginator('describe_instances')
response = paginator.paginate().build_full_result()
ec2_instance = response['Reservations']
for instance in ec2_instance:
print(instance['Instances'][0]['InstanceId'])
【问题讨论】:
标签:
python
python-2.7
amazon-web-services
boto3
【解决方案1】:
describe_instances() 的回复是:
{
'Reservations': [
{
'Groups': [
{
'GroupName': 'string',
'GroupId': 'string'
},
],
'Instances': [
{
'AmiLaunchIndex': 123,
...
注意响应是:
- 字典
-
Reservations 是一个列表,其中包含:
因此,代码确实需要循环遍历所有的 Reservations 和实例。
目前,您的代码正在循环通过 Reservation(错误地调用它们实例),然后仅从该 Reservation 中检索第一个 ([0]) 实例。
您可能需要这样的代码:
for reservation in response['Reservations']:
for instance in reservation['Instances']:
print(instance['InstanceId'])
【解决方案2】:
如果您使用resource 而不是client,则无需担心分页问题。
import boto3
ec2 = boto3.resource('ec2')
response = ec2.instances.all()
for item in response:
print(item.id)
代码会给你所有的结果。
【解决方案3】:
您可以这样做,而不是调用 build_full_result():
import boto3
pag = boto3.client('ec2').get_paginator('describe_instances')
for page in pag.paginate():
for res in page['Reservations']:
for inst in res['Instances']:
print( inst['InstanceId'])
调用 build_full_result() 可能会破坏分页的目的,即管理内存并避免超时。