Wie vermeide ich RequestLimitExceeded-Fehler, wenn ich PowerShell verwende, um mehrere Amazon EC2-Instances programmgesteuert zu starten?

Lesedauer: 3 Minute
0

Wenn ich PowerShell verwende, um mehrere Amazon Elastic Compute Cloud (Amazon EC2)-Instances zu starten, erhalte ich manchmal RequestLimitExceeded-Fehler.

Behebung

Ein RequestLimitExceeded-Fehler für Amazon EC2-APIs weist in der Regel auf eine API-Drosselung zur Begrenzung der Anforderungsrate oder zur Begrenzung der Ressourcenrate hin. Sie können eine Kombination aus Wiederholungslogik und exponentiellen Backoff-Strategien verwenden, um dieses Problem zu umgehen.

Das Starten einer Amazon EC2-Instance ist ein sich verändernder Aufruf, der sowohl der Anforderungsrate als auch der Begrenzung der Ressourcenrate unterliegt. Das Skript, das Sie zum Starten der Instances verwenden, muss die Refill-Rate des Token-Buckets berücksichtigen.

Verwenden Sie eine der folgenden Strategien für verzögerte Aufrufe oder Wiederholungsversuche, um RequestLimitExceeded-Fehler zu vermeiden.

**Hinweis:**Das AWS SDK für.NET verfügt über einen integrierten Wiederholungsmechanismus, der standardmäßig aktiviert ist. Informationen zum Anpassen der Zeitüberschreitungen finden Sie unter Wiederholungsversuche und Zeitüberschreitungen.

Das folgende Beispiel enthält einen verzögerten Aufrufmechanismus für Ihre Anfragen. Durch den verzögerten Aufruf kann sich der Request-Bucket füllen:

# 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 = 10
     }
  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!"
}

Das folgende Beispiel enthält die Wiederholungslogik im Skript:

# 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 = 50
            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)

Ähnliche Informationen

Anfordern einer Drosselung für die Amazon EC2-API

Verhalten bei Wiederholung

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr