Ich bin kein Chef-Experte. Ich versuche, eine Netzwerkinfrastruktur auf AWS bereitzustellen. Wenn ich das Kochbuch ausführe, das ich mit Knife auf meinen Chef-Server hochgeladen habe, werden viele API-Anfragen an AWS gestellt, um die Infrastruktur zu konfigurieren. Anscheinend so viele in so kurzer Zeit, dass AWS die Anfragen blockiert und dieser Fehler schließlich auftritt:
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.
Ich habe recherchiert (https://github.com/chef/knife-ec2/issues/453), und ich verstehe, dass eine mögliche Lösung einfach darin besteht, die Rate der nachfolgenden Anfragen zu verlangsamen, zum Beispiel indem man im Ruby-Skript ein SLEEP einfügt, um zwischen den Anfragen ein paar Sekunden lang zu pausieren. Verstanden, einfach, genial:
sleep 3
...Und keine Ahnung, wo ich das hinstellen soll.
Weiß jemand, wo ich diesen Code platzieren muss, in welcher Datei oder Funktion?
Vielleicht auf "ec2_server_create_spec.rb" oder woanders? In welcher Funktion?
Muss ich das Skript anschließend irgendwie „kompilieren“?
Ich habe alles versucht, was ich für sinnvoll hielt, aber es ist mir nicht gelungen. Irgendwelche Vorschläge, was ich ändern könnte?
Antwort1
Ich habe endlich die Datei und das Skript gefunden, in die SLEEP eingefügt werden konnte, um die Geschwindigkeit der Anfragen zu drosseln. Es hat funktioniert.
Es war spezifisch für meine Bereitstellungsskripte, daher kann ich nicht genau mitteilen, wo, da jeder Fall anders ist.