2012-02-23 6 views
2

私はいくつかの異なるAMIから多くのEC2インスタンスを起動して終了するAWSアプリケーションを持っています。AWS EC2のリクエスト制限を超えている理由を確認するにはどうすればよいですか?

ruby​​ apiでこのエラーが発生するようになりました。リクエストの上限を超えました。私が信じているほとんどのアカウントでは、上限は1時間あたり約2,000です。しかし私は、私がチェックするために知っているすべてのログを見て、この高さに近いところにある私たちの使用の証拠を見つけることはできません。

私が作っているEC2 APIのクエリをAmazonからアカウンティングする方法はありますか?

私の過度の使用を是正するための他のトリックや良い方法、またはエラーの原因はありますか?

+1

これは、インスタンスの開始/停止が多いことです。インスタンスを終了することは、本質的にXEN VMを破壊することです。私の提案は、実行中のインスタンスを使用することによって、どのようにトーンダウンするかを理解することです。 – EdH

+2

私は彼らがすべてスタート&ストップだとは思っていません。ロガーを有効にすると、何が行われたかを特定するのに役立ちます。 –

答えて

2

AWS.configを介してaws-sdk gemのログを有効にすることができます。ルビーロガーのインスタンスを渡すだけです。

require 'logger' 
AWS.config(:logger => Logger.new($stdout)) 

EC2リソースから属性を取得するためにn + 1個のクエリが実行されている可能性があります。ここでの例である:

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

関連する問題