清洁 Boto3 分页
Clean Boto3 Pagination
我正在尝试找到一个非常好的 python 习惯用法,以最“pythonic”的方式使用 aws boto3 分页器。以下是我能想到的最好的,但我仍然不满意。关于如何使分页更简单的任何想法,可能不使用 while True:
?
import boto3
client = boto3.client('acm', region_name='ap-southeast-2')
paginator = client.get_paginator('list_certificates')
response_iterator = paginator.paginate()
while True:
for certificates in response_iterator:
for certificate in certificates['CertificateSummaryList']:
print(certificate)
if response_iterator.resume_token:
response_iterator = paginator.paginate(
PaginationConfig={
'StartingToken': response_iterator.resume_token
})
else:
break
下面的表格不行吗?:
client = boto3.client('acm', region_name='ap-southeast-2')
paginator = client.get_paginator('list_certificates')
for page in paginator.paginate():
print(page)
它没有真正的文档记录,但你可以用分页器做这样的事情
client = boto3.client('acm')
results = (
client.get_paginator('list_certificates')
.paginate()
.build_full_result()
)
print(results)
edit
ec2
的类似方法具有更烦人的响应结构之一:
import jmespath
client = boto3.client('ec2')
results = (
client.get_paginator('describe_instances')
.paginate()
.build_full_result()
)
# jmespath could be replaced with some nested for loops if you prefer, but I find this "cleaner" and easier to read.
instances = jmespath.search('Reservations[].Instances[]')
for i in instances:
print(i['InstanceId'])
您可以生成一个示例输出响应,它对于大多数(如果不是全部)服务来说非常方便,这可能让我在尝试计算时节省了 天。
不幸的是,I think there's a bug in the aws-cli skeleton output for acm list-certificates
但相当于 ec2.describe_instances
只是为了好玩。
$ aws ec2 describe-instances --generate-cli-skeleton output
{
"Reservations": [
{
"Groups": [
{
"GroupName": "GroupName",
"GroupId": "GroupId"
}
],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "ImageId",
"InstanceId": "InstanceId",
"InstanceType": "InstanceType",
"KernelId": "KernelId",
"KeyName": "KeyName",
"LaunchTime": "1970-01-01T00:00:00",
"Monitoring": {
"State": "State"
},
...
我正在尝试找到一个非常好的 python 习惯用法,以最“pythonic”的方式使用 aws boto3 分页器。以下是我能想到的最好的,但我仍然不满意。关于如何使分页更简单的任何想法,可能不使用 while True:
?
import boto3
client = boto3.client('acm', region_name='ap-southeast-2')
paginator = client.get_paginator('list_certificates')
response_iterator = paginator.paginate()
while True:
for certificates in response_iterator:
for certificate in certificates['CertificateSummaryList']:
print(certificate)
if response_iterator.resume_token:
response_iterator = paginator.paginate(
PaginationConfig={
'StartingToken': response_iterator.resume_token
})
else:
break
下面的表格不行吗?:
client = boto3.client('acm', region_name='ap-southeast-2')
paginator = client.get_paginator('list_certificates')
for page in paginator.paginate():
print(page)
它没有真正的文档记录,但你可以用分页器做这样的事情
client = boto3.client('acm')
results = (
client.get_paginator('list_certificates')
.paginate()
.build_full_result()
)
print(results)
edit
ec2
的类似方法具有更烦人的响应结构之一:
import jmespath
client = boto3.client('ec2')
results = (
client.get_paginator('describe_instances')
.paginate()
.build_full_result()
)
# jmespath could be replaced with some nested for loops if you prefer, but I find this "cleaner" and easier to read.
instances = jmespath.search('Reservations[].Instances[]')
for i in instances:
print(i['InstanceId'])
您可以生成一个示例输出响应,它对于大多数(如果不是全部)服务来说非常方便,这可能让我在尝试计算时节省了 天。
不幸的是,I think there's a bug in the aws-cli skeleton output for acm list-certificates
但相当于 ec2.describe_instances
只是为了好玩。
$ aws ec2 describe-instances --generate-cli-skeleton output
{
"Reservations": [
{
"Groups": [
{
"GroupName": "GroupName",
"GroupId": "GroupId"
}
],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "ImageId",
"InstanceId": "InstanceId",
"InstanceType": "InstanceType",
"KernelId": "KernelId",
"KeyName": "KeyName",
"LaunchTime": "1970-01-01T00:00:00",
"Monitoring": {
"State": "State"
},
...