■ はじめに
他メンバーの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
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