我不是 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 来降低请求速度的文件和脚本。它起作用了。
它特定于我的部署脚本,所以我无法分享具体位置,因为每个情况都不同。