AWS Developer Tools Blog
Response Paging
We’ve been busy working on version 2 of the AWS SDK for Ruby. One of the features we added recently was response paging.
Paging in the Version 1 Ruby SDK
In version 1 of the Ruby SDK provides collection classes for many AWS resources. These collections are enumerable objects that yield resource objects.
iam = AWS::IAM.new user_collection = iam.users user_collection.each |user| puts user.name end
A collection in version 1 sends a request to enumerate resources. If the response indicates that more data is available, then the collection will continue sending requests to enumerate all resources.
If you want to enumerate a resource that is not modeled in the version 1 SDK, then you need to drop down to the client abstraction and deal with paging on your own.
iam = AWS::IAM.new options = { max_items: 2 } begin response = iam.client.list_users(options) response[:users].each do |user| puts user[:user_name] end options[:marker] = response[:marker] end while options[:marker]
Response Paging in Version 2 Ruby SDK
One of our main goals of the version 2 Ruby SDK is to improve the experience of users accessing AWS from the client abstractions. Version 2 does not provide resource abstractions yet, but it does provide full response paging from the client interface.
Here is the example above re-written using the version 2 Ruby SDK:
iam = Aws::IAM.new iam.list_users.each do |response| puts response.users.map(&:user_name) end
Each AWS operation now returns a pageable response object. This object is enumerable. Calling #each
on a Aws::PagableResponse
object yields the response and any follow up responses.
There are a few other helper methods that make it easy to control response paging:
resp.last_page? #=> false resp.next_page? #=> true # get the next page, raises an error if this is the last page resp = resp.next_page # gets each response in a loop resp = resp.next_page until resp.last_page?
Resource Enumeration in the Version 2 Ruby SDK
You will notice the response paging examples don’t address enumerating individual resource objects. We are busy implementing a resource abstraction for the version 2 Ruby SDK. The v2 resources will be enumerable in a method similar to v1. It will however be built on top of client response paging.
Watch the GitHub respository and this blog for more information on resource abstractions in the version 2 Ruby SDK.