私は 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 を配置してリクエストの速度を低下させることができるファイルとスクリプトを見つけました。うまくいきました。
これは私のデプロイメント スクリプトに固有のものであり、ケースごとに異なるため、正確な場所を共有することはできません。