翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS SDK for Rust でページ分割された結果を使用する
多くの AWS オペレーションでは、ペイロードが大きすぎて 1 回の応答では返せない場合に、結果を一部切り捨てて返します。代わりに、サービスはデータの一部とトークンを返し、次の項目のセットを取得します。このパターンは、ページ分割と呼ばれています。
AWS SDK for Rust には、自動的に結果をページ分割するために使用できるオペレーションビルダーの拡張機能メソッド into_paginator が含まれています。ユーザーは、この結果を処理するコードを記述するだけで済みます。すべてのページ分割オペレーションビルダーには into_paginator() メソッドがあり、結果をページ分割するために PaginationStream<Item>
-
Amazon S3 では、その一例として
aws_sdk_s3::operation::list_objects_v2::builders::ListObjectsV2FluentBuilder::into_paginatorがあります。
次の例では、Amazon Simple Storage Service を使用しています。ただし、ページ分割された API を 1 つ以上持つサービスについては同じ概念です。
次のコード例は、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); } }