2012-02-23 73 views
2

我有一個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

回答

2

您可以通過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