AWS SDK for Rust에서 페이지 매김된 결과 사용 - AWS SDK for Rust

AWS SDK for Rust에서 페이지 매김된 결과 사용

많은 AWS 작업이 페이로드가 너무 커서 단일 응답을 반환할 수 없을 때 잘린 결과를 반환합니다. 대신 서비스는 데이터의 일부와 토큰을 반환하여 다음 항목 세트를 검색합니다. 이 패턴을 페이지 매김이라고 합니다.

AWS SDK for Rust에는 결과를 자동으로 페이지 매김하는 데 사용할 수 있는 작업 빌더의 into_paginator 확장 메서드가 포함되어 있습니다. 결과를 처리할 코드를 작성하기만 하면 됩니다. 모든 페이지 매김 작업 빌더에는 PaginationStream<Item>을 노출하여 결과를 페이지 매김하는 into_paginator() 메서드가 있습니다.

다음 예제에서는 Amazon Simple Storage Service를 사용합니다. 그러나 하나 이상 페이지 매김된 API가 있는 모든 서비스에서 개념은 동일합니다.

다음 코드 예제는 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); } }