Come faccio a evitare gli errori RequestLimitExceeded quando utilizzo PowerShell per avviare più istanze Amazon EC2 a livello di programmazione?
Quando utilizzo PowerShell per avviare più istanze Amazon Elastic Compute Cloud (Amazon EC2), a volte ricevo errori RequestLimitExceeded.
Risoluzione
Un errore RequestLimitExceeded per le API Amazon EC2 di solito indica una limitazione della frequenza delle richieste o una limitazione della velocità delle risorse alle API. È possibile utilizzare una combinazione di logica di ripetizione e strategie di backoff esponenziali per ovviare a questo problema.
Il lancio di un'istanza Amazon EC2 è una chiamata mutante ed è soggetta alla limitazione della velocità delle richieste e della velocità delle risorse. Lo script utilizzato per avviare le istanze deve soddisfare la frequenza di ricarica del bucket di token.
Utilizza una delle seguenti strategie di chiamata ritardata o di ripetizione per evitare errori RequestLimitExceeded.
Nota: AWS SDK for .NET dispone di un meccanismo di ripetizione dei tentativi integrato che è attivato per impostazione predefinita. Per personalizzare i timeout, consulta Ritentativi e timeout.
L'esempio seguente include un meccanismo di chiamata ritardata per le tue richieste. L'invocazione ritardata consente al bucket di richiesta di riempire:
# 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!" }
L'esempio seguente include la logica dei tentativi nello 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 = 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)
Informazioni correlate
- Argomenti
- Computazionali
- Lingua
- Italiano

Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa