Salta al contenuto

Come posso risolvere gli errori "RequestLimitExceeded" che ricevo quando utilizzo PowerShell per avviare più istanze Amazon EC2 a livello di programmazione?

3 minuti di lettura
0

Quando utilizzo PowerShell per avviare più istanze Amazon Elastic Compute Cloud (Amazon EC2), ricevo errori "RequestLimitExceeded".

Risoluzione

Lo script utilizzato per avviare un'istanza EC2 deve rispettare la quota di frequenza delle richieste API e la quota di frequenza delle risorse API. Se superi queste quote, ricevi errori "RequestLimitExceeded".

Per risolvere il problema, implementa strategie come la logica di ripetizione e il backoff esponenziale.

Nota: per impostazione predefinita, AWS SDK per .NET dispone di un meccanismo di ripetizione integrato.

Prerequisiti:

Se la frequenza delle richieste è prevedibile e puoi controllarla in anticipo, utilizza l'invocazione ritardata per recuperare la limitazione (della larghezza di banda della rete) quando si verifica.

Esempio di script:

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

Nota: sostituisci AMI_ID con l'ID della tua Amazon Machine Image (AMI), Subnet_ID con l'ID della tua sottorete e m5a.large con il tuo tipo di istanza. Inoltre, sostituisci 10 con il numero minimo di istanze da avviare e 15 con il numero massimo di istanze da avviare.

Se la frequenza delle richieste non è prevedibile, includi la logica di ripetizione nello script.

Esempio di script:

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

Nota: sostituisci AMI_ID con l'ID della tua AMI, Subnet_ID con l'ID della tua sottorete e m5a.large con il tuo tipo di istanza. Inoltre, sostituisci 40 con il numero minimo di istanze da avviare e 50 con il numero massimo di istanze da avviare.

Informazioni correlate

Richiedi la limitazione (della larghezza di banda della rete) per l'API Amazon EC2

Comportamento di ripetizione

AWS UFFICIALEAggiornata 7 mesi fa