Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Viele AWS Operationen geben gekürzte Ergebnisse zurück, wenn die Nutzlast zu groß ist, um sie in einer einzigen Antwort zurückzugeben. Stattdessen gibt der Dienst einen Teil der Daten und ein Token zurück, um den nächsten Satz von Elementen abzurufen. Dieses Muster wird als Paginierung bezeichnet.
AWS SDK for Rust Dazu gehören Erweiterungsmethoden into_paginator
für Operation Builder, mit denen Sie die Ergebnisse automatisch paginieren können. Sie müssen nur den Code schreiben, der die Ergebnisse verarbeitet. Allen Generatoren für Paginierungsoperationen steht eine into_paginator()
Methode zur Verfügung, mit der die Ergebnisse paginiert werden PaginationStream<Item>
-
In Amazon S3 ist ein Beispiel dafür
aws_sdk_s3::operation::list_objects_v2::builders::ListObjectsV2FluentBuilder::into_paginator
.
In den folgenden Beispielen wird Amazon Simple Storage Service verwendet. Die Konzepte sind jedoch für jeden Service identisch, der über einen oder mehrere Seiten verfügt. APIs
Das folgende Codebeispiel zeigt das einfachste Beispiel, in dem die 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<_>>();
Manchmal möchten Sie mehr Kontrolle über das Paging haben und nicht alles auf einmal in den Speicher ziehen. Im folgenden Beispiel wird über Objekte in einem Amazon S3 S3-Bucket iteriert, bis keine weiteren mehr vorhanden sind.
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);
}
}