翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
多くの AWS オペレーションは、ペイロードが大きすぎて 1 回のレスポンスで返せない場合に、切り捨てられた結果を返します。代わりに、サービスはデータの一部とトークンを返し、次の項目のセットを取得します。このパターンはページ分割と呼ばれます。
AWS SDK for Rust には、結果を自動的にページ分割するために使用できるinto_paginator
オペレーションビルダーの拡張メソッドが含まれています。結果を処理するコードを記述するだけで済みます。すべてのページ分割オペレーションビルダーには、結果をページ分割PaginationStream<Item>
into_paginator()
メソッドがあります。
次の例では、Amazon Simple Storage Service を使用しています。ただし、概念は、ページ分割された APIs。
次のコード例は、 try_collect()
Vec
。
let config = aws_config::defaults(BehaviorVersion::latest())
.load()
.await;
let s3 = aws_sdk_s3::Client::new(&config);
let all_objects = s3.list_objects_v2()
.bucket("my-bucket")
.into_paginator()
.send()
.try_collect()
.await?
.into_iter()
.flat_map(|o| o.contents.unwrap_or_default())
.collect::<Vec<_>>();
ページングをより細かく制御し、すべてを一度にメモリに取り込まないようにしたい場合があります。次の例では、Amazon S3 バケット内のオブジェクトがなくなるまで反復処理を行います。
let config = aws_config::defaults(BehaviorVersion::latest())
.load()
.await;
let s3 = aws_sdk_s3::Client::new(&config);
let mut paginator = s3.list_objects_v2()
.bucket("my-bucket")
.into_paginator()
// customize the page size (max results per/response)
.page_size(10)
.send();
println!("Objects in bucket:");
while let Some(result) = paginator.next().await {
let resp = result?;
for obj in resp.contents() {
println!("\t{:?}", obj);
}
}