Manchmal erhalte ich den Fehler "Rate exceeded" (Rate-überschritten), wenn ich AWS CloudFormation verwende. Wie verhindere ich, dass dieser Fehler auftritt?
Kurzbeschreibung
Der Rate-überschritten-Fehler tritt auf, wenn API-Aufrufe an einen AWS-Service die maximal zulässigen API-Anforderungen überschreiten und die API-Aufrufe gedrosselt werden. Im Allgemeinen sind diese Fehler vorübergehend und lösen sich von selbst auf, wenn die Anzahl der API-Aufrufe abnimmt.
Um den Rate-überschritten-Fehler zu verhindern, können Sie:
- Exponentielles Backoff implementieren
- Stacks nacheinander erstellen oder aktualisieren
- Das DependsOn-Attribut verwenden
- Eine Kontingent-Erhöhung beantragen
Auflösung
Exponentielles Backoff implementieren
Wenn Sie AWS-API-Endpunkte verwenden, implementieren Sie ein exponentielles Backoff, um die Anzahl der getätigten API-Aufrufe zu verringern.
Der folgende Beispiel-Pseudocode für einen DescribeStacks-API-Aufruf ist so konfiguriert, dass der API-Aufruf nach einer bestimmten Zeit erneut versucht wird:
{
Make ‘DescribeStacks’ API call
if throttled: wait 2 sec; Make ‘DescribeStacks’ API call
if throttled: wait 4 sec; Make ‘DescribeStacks’ API call
if throttled: wait 8 sec; Make ‘DescribeStacks’ API call
if throttled: wait 16 sec; Make ‘DescribeStacks’ API call
if throttled: wait 32 sec; Make ‘DescribeStacks’ API call
}
Stacks nacheinander erstellen oder aktualisieren
Das gleichzeitige Erstellen oder Aktualisieren mehrerer CloudFormation-Stacks kann dazu führen, dass viele API-Aufrufe gleichzeitig ausgeführt werden. Um zu verhindern, dass die API-Aufrufe die maximal zulässigen API-Anforderungen überschreiten, erstellen oder aktualisieren Sie jeweils einen Stack.
Das DependsOn-Attribut verwenden
Sofern keine Abhängigkeit zwischen Ressourcen definiert ist, erstellt und aktualisiert CloudFormation Ressourcen gleichzeitig. Das DependsOn-Attribut definiert Abhängigkeiten zwischen Ressourcen, um gleichzeitige Aktualisierungen zu steuern.
Mit dem DependsOn-Attribut können Sie angeben, wann jede abhängige Ressource erstellt oder aktualisiert wird. Wenn Ressource B beispielsweise von Ressource A abhängig ist, können Sie angeben, dass Ressource A vor Ressource B erstellt oder aktualisiert wird. Dadurch wird die Anzahl der gleichzeitig ausgeführten API-Aufrufe begrenzt und das Auftreten von Drosselungen verringert. Sie können das DependsOn-Attribut auch mit verschachtelten Stacks verwenden.
Eine Kontingent-Erhöhung beantragen
Wenn die vorherigen Lösungen für Ihre Situation nicht funktionieren, können Sie eine Kontingent-Erhöhung beantragen. Bevor Sie eine Kontingent-Erhöhung beantragen, identifizieren Sie den API-Aufruf, um zu ermitteln, welcher die Aufruf-Rate überschreitet.
Geben Sie in Ihrem Antrag auf eine Kontingent-Erhöhung Ihre AWS-Region, den Zeitrahmen der API-Drosselung und den Grund für die Erhöhung an.