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

标签 ruby amazon-ec2 amazon-web-services

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

我开始通过 ruby​​ api 收到此错误,超出请求限制。我相信对于大多数帐户来说,这个限制是每小时 2,000 左右。但是在查看了我知道要检查的所有日志之后,我找不到任何证据表明我们的使用量接近这个高。

有没有办法从 Amazon 获取我正在执行的 EC2 API 查询的账目?

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

最佳答案

您可以通过 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 block 中运行代码来改进这一点:

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

关于ruby - 我如何找出超出 AWS EC2 请求限制的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408481/

相关文章:

linux - 以非 root 用户身份在 UserData 中运行命令

python - 在 python 中从实例本身获取 AWS EC2 Spot 实例启动时间

amazon-web-services - 为什么 AWS Gateway 为从 S3 流式传输的图像设置了错误的内容长度?

amazon-web-services - AWS 上的 terraform 的多个可用区

bash - 将文本文件中的额外列拆分为单独的行(保留第一列)

json - 我的自动缩放云形成模板不起作用

ruby-on-rails - 如何在 Rails 中获取 "each"循环的计数器?

ruby - 已安装的 gem 列表?

ruby - 无法通过 ruby​​ API 插入新的 Google 日历事件,提醒错误

ruby - Rails 4 初始化程序未加载