如何找出我超出AWS EC2请求限制的原因?

时间:2012-02-23 06:56:21

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

我有一个AWS应用程序启动并终止来自几个不同AMI的许多EC2实例。

我开始收到此错误,通过ruby api,超出请求限制。对于我认为的大多数帐户,限制大约是每小时2,000。但是在浏览了我知道要检查的所有日志之后,我找不到任何接近这个高点的证据。

有没有办法从亚马逊获取我正在制作的EC2 API查询?

是否有任何其他技巧或好方法来确定我的过度使用,或导致错误的原因是什么?

1 个答案:

答案 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