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

问题描述:

我有一个AWS应用程序,它启动并终止来自几个不同AMI的许多EC2实例。如何找出我超出AWS EC2请求限制的原因?

我开始得到这个错误,通过红宝石api,超过请求限制。我相信大多数账户的限额约为每小时2000美元。但是在查看所有我知道检查的日志后,我找不到任何证据表明我们的使用情况在任何接近此高的地方。

有没有办法从亚马逊那里获得我正在做的EC2 API查询的会计?

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

+1

这是很多实例启动/停止。记住,终止一个实例本质上是“破坏”一个XEN虚拟机。我的建议是通过使用正在运行的实例来弄清楚如何调整它。 – EdH 2012-02-23 07:06:59

+2

我怀疑他们都是开始和停止,我怀疑他们是描述电话。启用记录器可帮助您确定进行了哪些呼叫。 – 2012-02-23 19:24:12

您可以通过AWS.config为aws-sdk gem启用日志记录。只需传入一个红宝石记录器的实例。

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

+0

是的,我们已经在做这个。 – Dogweather 2012-02-23 21:45:54