我有一个AWS应用程序启动并终止来自几个不同AMI的许多EC2实例。
我开始收到此错误,通过ruby api,超出请求限制。对于我认为的大多数帐户,限制大约是每小时2,000。但是在浏览了我知道要检查的所有日志之后,我找不到任何接近这个高点的证据。
有没有办法从亚马逊获取我正在制作的EC2 API查询?
是否有任何其他技巧或好方法来确定我的过度使用,或导致错误的原因是什么?
答案 0 :(得分:2)
您可以通过AWS.config启用aws-sdk gem的日志记录。只需传入一个ruby Logger的实例。
require 'logger'
AWS.config(:logger => Logger.new($stdout))
您可能遇到运行n + 1个查询以从EC2资源获取属性的情况。这是一个例子:
ec2 = AWS::EC2.new
ec2.instances.each do |i|
puts i.status
end
执行1个请求以获取每个实例的ID,然后每个实例执行1个请求以获取其状态。您可以通过在memoize块中运行代码来改善这一点:
AWS.memoize do
ec2.instances.each do |i|
puts i.status
end
end
您还可以使用AWS.start_memoizing(和AWS.stop_memoizing)来包围更大的代码区域。我强烈建议阅读这篇关于集合如何在aws-sdk中运行的博客文章:http://aws.typepad.com/aws/2012/01/how-collections-work-in-the-aws-sdk-for-ruby.html