AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Wie behebe ich „RequestLimitExceeded“-Fehler, die auftreten, wenn ich PowerShell verwende, um mehrere Amazon EC2-Instances programmgesteuert zu starten?
Wenn ich PowerShell verwende, um mehrere Amazon Elastic Compute Cloud (Amazon EC2)-Instances zu starten, erhalte ich „RequestLimitExceeded“-Fehler.
Lösung
Das Skript, das du zum Starten einer EC2-Instance verwendest, muss das Kontingent für API-Anforderungsraten und das Kontingent für API-Ressourcenraten einhalten. Wenn du diese Kontingente überschreitest, erhältst du „RequestLimitExceeded“-Fehler.
Um dieses Problem zu beheben, implementiere Wiederholungslogik und Strategien für exponentielles Backoff.
Hinweis: Standardmäßig verfügt das AWS SDK für .NET über einen integrierten Wiederholungsmechanismus.
Voraussetzungen:
- Installiere AWS Tools für PowerShell.
- Konfiguriere die Authentifizierung für AWS IAM Identity Center.
Wenn deine Anforderungsrate vorhersehbar ist und du sie im Voraus steuern kannst, verwende den verzögerten Aufruf, um die Drosselung bei deren Auftreten zu beheben.
Beispielskript:
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 # Example Code to launch 50 EC2 instances of type 'm5a.large'. try { $params = @{ ImageId = 'AMI_ID' InstanceType = 'm5a.large' AssociatePublicIp = $false SubnetId = 'Subnet_ID' MinCount = 10 MaxCount = 15 } for ($i=0;$i<5;$i++){ $instance = New-EC2Instance @params Start-Sleep 5000 #Sleep for 5 seconds to allow Request bucket to refill at the rate of 2 requests per second } } catch { Write-Error "An Exception Occurred!" }
Hinweis: Ersetze AMI_ID durch die ID deines Amazon Machine Image (AMI), Subnet_ID durch deine Subnetz-ID und m5a.large durch deinen Instance-Typ. Ersetze außerdem 10 durch die minimale Anzahl der zu startenden Instances und 15 durch die maximale Anzahl der zu startenden Instances.
Wenn deine Anforderungsrate nicht vorhersehbar ist, schließe eine Wiederholungslogik in das Skript ein.
Beispielskript:
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 #Example Code to launch 50 EC2 instances of type 'm5a.large'. $Stoploop = $false [int] $Retrycount = "0" do { try { $params = @{ ImageId = 'AMI_ID' InstanceType = 'm5a.large' AssociatePublicIp = $false SubnetId = 'Subnet_ID' MinCount = 40 MaxCount = 50 } $instance = New-EC2Instance @params $Stoploop = $true } catch { if ($Retrycount -gt 3) { Write - Host "Could not complete request after 3 retries." $Stoploop = $true } else { Write-Host "Could not complete request retrying in 5 seconds." Start-Sleep -Seconds 25 #25 seconds of sleep allows for 50 request tokens to be refilled at the rate of 2/sec $Retrycount = $Retrycount + 1 } } } While($Stoploop -eq $false)
Hinweis: Ersetze AMI_ID durch deine AMI-ID, Subnet_ID durch deine Subnetz-ID und m5a.large durch deinen Instance-Typ. Ersetze außerdem 40 durch die minimale Anzahl der zu startenden Instances und 50 durch die maximale Anzahl der zu startenden Instances.
Weitere Informationen
Request throttling for the Amazon EC2 API (Anfordern einer Drosselung für die Amazon EC2-API)
Retry behavior (Verhalten bei Wiederholung)
- Themen
- Compute
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Jahren
AWS OFFICIALAktualisiert vor einem Jahr