如何从route53获取所有记录?

时间:2018-10-06 23:15:51

标签: ruby amazon-web-services amazon-route53

如何从route53获取所有记录?

在这里引用代码段,该代码段似乎对某人有用,但对我来说却不清楚:https://github.com/aws/aws-sdk-ruby/issues/620

试图通过资源记录集获取全部(我大约有7000条记录),但似乎无法获得与list_resource_record_sets一起使用的分页。这是我所拥有的:

route53 = Aws::Route53::Client.new
response = route53.list_resource_record_sets({ 
  start_record_name: fqdn(name),
  start_record_type: type,
  max_items: 100, # fyi - aws api maximum is 100 so we'll need to page 
}) 

response.last_page? 
response = response.next_page until response.last_page?

我确认我已经迷上了正确的区域,我在aws控制台中看到了我想要获取的记录(以便以后可以删除),但似乎无法通过api获取。我使用了这个:https://github.com/aws/aws-sdk-ruby/issues/620作为起点。

关于我在做什么错的任何想法?还是有一种更简单的方法,也许是我找不到的api中的另一种方法,对于我来说,只要获得hosted_zone_id,类型和名称,我就可以得到我需要的记录?

1 个答案:

答案 0 :(得分:1)

您链接的问题是针对Ruby AWS SDK v2的,但最新的是v3。自2014年以来,情况似乎有所变化,因为我没有看到v2 APIv3 API中的#next_page#last_page?方法。

请考虑在#next_record_name为true时从响应中使用#next_record_type#is_truncated。这与Ruby AWS SDK中其他分页的工作方式(例如DynamoDB扫描)更加一致。

类似以下的方法应该可以工作(尽管我没有具有记录的AWS账户来对其进行测试):

route53 = Aws::Route53::Client.new

hosted_zone = ? # Required field according to the API docs
next_name = fqdn(name)
next_type = type

loop do
  response = route53.list_resource_record_sets(
    hosted_zone_id: hosted_zone,
    start_record_name: next_name,
    start_record_type: next_type,
    max_items: 100, # fyi - aws api maximum is 100 so we'll need to page 
  )

  records = response.resource_record_sets

  # Break here if you find the record you want

  # Also break if we've run out of pages
  break unless response.is_truncated

  next_name = response.next_record_name
  next_type = response.next_record_type
end