Не уверен, правильно ли я понимаю вашу проблему, потому что задача выглядит для меня довольно просто, согласно вашему собственному описанию:
Получите ответ, переберите данные и обработайте их как-нибудь
Если ответ содержит next_token
, повторите (1), используя предоставленный следующий_текст
В противном случае выйдите.
Предполагая, что ответ последней страницы имеет значение nil как next_token (я не нашел точного ответа в документации по SDK, поэтому лучше сначала проверить это предположение) может сработать что-то вроде следующего:
require 'aws-sdk'
QUERY = <<~
SELECT
resourceId
WHERE
resourceType = 'AWS::EC2::Instance'
QUERY
configservice = Aws::ConfigService::Client.new(region: 'eu-west-1')
next_token = nil
loop do
response = configservice.select_resource_config({
limit: 100,
expression: QUERY,
next_token: next_token
}.compact)
response.results.each { ... } # do something with the results
break if response.next_token.nil?
next_token = response.next_token
end
P.S. Я не понимаю, как
get_ec2.each do |response|
puts response.map(&:next_token)
end
может работать в вашем примере, принимая во внимание, что ответ является просто структурой , поэтому его '#each
просто перебирает поля структур (и никто из них не отвечает на next_token). Это действительно работает?