执行 Chef 食谱时如何解决“Fog::Compute::AWS::Error:RequestLimitExceeded => 超出请求限制。”

执行 Chef 食谱时如何解决“Fog::Compute::AWS::Error:RequestLimitExceeded => 超出请求限制。”

我不是 Chef 专家。我正在尝试在 AWS 上部署网络基础设施。当我使用 Knife 执行上传到 Chef Server 的食谱时,会向 AWS 发出大量 API 请求来配置基础设施,显然在如此短的时间内发出的请求如此之多,以至于 AWS 阻止了这些请求,最终发生了此故障:

ubuntu@ip-172-66-250-88:~/chef$ knife deployment resize -E core_1 -V
[...]
INFO: Creating security groups...
INFO: Adding rule {:ip_protocol=>:tcp, :min=>7000, :max=>7000, :group=>"sg-04463cd014cc1562c"} to mme-pgw
INFO: Adding rule {:ip_protocol=>:tcp, :min=>9160, :max=>9160, :group=>"sg-04463cd014cc1562c"} to mme-enb
[...]
ERROR: Fog::Compute::AWS::Error: RequestLimitExceeded => Request limit exceeded.

我已经研究过(https://github.com/chef/knife-ec2/issues/453),我理解一个潜在的解决方案就是减慢随后完成的请求的速度,例如,在 Ruby 脚本中放置一个 SLEEP 以在请求之间暂停几秒钟。明白了,很简单,很棒:

sleep 3

...并且不知道将其放在哪里。

有人知道我必须把该代码放在哪里、在哪个文件或函数里吗?

也许在“ec2_server_create_spec.rb”或其他地方?在哪个函数里面?

我是否必须事后“编译”该脚本?

我尝试了我认为合理的一切,但都失败了。有什么修改建议吗?

答案1

我终于找到了可以设置 SLEEP 来降低请求速度的文件和脚本。它起作用了。

它特定于我的部署脚本,所以我无法分享具体位置,因为每个情况都不同。

相关内容