【AWS】boto3 ~ Paginators ~

■ はじめに

他メンバーのPythonコードを見ていて、
~~~
paginator = client.get_paginator('list_objects_v2')
~~~
ってでてきて、なんだこれ?ってなったので
調べてみた。

目次

【1】Paginators を知る前に
【2】Paginators
【3】サンプル
 例1:Hello World for list_objects_v2
 例2:Prefix の指定
【4】補足:list_objects_v2以外の使用
 1)CloudWatchLogs
 2)IAM
 3)EC2

【1】Paginators を知る前に

* 例えば、boto3 の list_objects_v2 でS3パスの一覧を取得した際に
 デフォルト だと 1000件を超える場合は、1000件で区切られて
 続きは自分で実装して取得しに行かなければならない
 => 以下の関連記事のサンプルを参考にしてもらうと
  分かると思うが、もっさりしたことを
  いちいち自分で書かなければならない
 => そこで、「Paginators」ってのを導入するといい

boto3 / list_objects_v2 の 使用上の注意 と その対策
https://dk521123.hatenablog.com/entry/2019/12/06/232617

【2】Paginators

* boto3には Paginator と呼ばれる仕組みがあり、
 ページ分割関連(ページネーション)の処理を全部巻き取ってくれ
 その結果、コードが簡潔に書ける
 => 上の関連記事のサンプルと以下「【3】サンプル」の比較すると
  理解が早いと思う

cf. Paginator (ページネーター)
 =  paginate (ページ数をつける) + or (する人)

【3】サンプル

例1:Hello World for list_objects_v2

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#creating-paginators

import boto3

# Create a client
client = boto3.client('s3', region_name='us-west-2')

# Create a reusable Paginator ★ここから注目★
paginator = client.get_paginator('list_objects_v2')

# Create a PageIterator from the Paginator ★イテレータを取得★
page_iterator = paginator.paginate(Bucket='your-s3-bucket')

# ★後はループさせるだけ★
for page in page_iterator:
    print(page['Contents'])

例2:Prefix の指定

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results

import boto3

client = boto3.client('s3', region_name='us-west-2')
paginator = client.get_paginator('list_objects_v2')
operation_parameters = {'Bucket': 'my-bucket',
                        'Prefix': 'foo/baz'}
page_iterator = paginator.paginate(**operation_parameters)
for page in page_iterator:
    print(page['Contents'])

【4】補足:list_objects_v2以外の使用

* 以下は、一例。

1)CloudWatchLogs

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/logs.html#paginators
describe_log_groups
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/logs/paginator/DescribeLogGroups.html

2)IAM

list_roles
https://boto3.amazonaws.com/v1/documentation/api/1.26.92/reference/services/iam/paginator/ListRoles.html

3)EC2

describe_instances
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/paginator/DescribeInstances.html

関連記事

Amazon S3 ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/03/06/212734
Amazon S3 ~ boto3 ~
https://dk521123.hatenablog.com/entry/2019/10/21/230004
Amazon S3 ~ Boto3でファイル存在チェック ~
https://dk521123.hatenablog.com/entry/2022/02/26/182526
boto3 / list_objects_v2 の 使用上の注意 と その対策
https://dk521123.hatenablog.com/entry/2019/12/06/232617