Comment éviter les erreurs RequestLimitExceeded lorsque j’utilise PowerShell pour lancer par programmation plusieurs instances Amazon EC2 ?

Lecture de 3 minute(s)
0

Lorsque j’utilise PowerShell pour lancer plusieurs instances Amazon Elastic Compute Cloud (Amazon EC2), je reçois parfois des erreurs RequestLimitExceeded.

Résolution

Une erreur RequestLimitExceeded pour les API Amazon EC2 indique généralement une limitation du taux de demandes ou une limitation du débit de ressources de l’API. Vous pouvez utiliser une combinaison de logique de relance et de stratégies de backoff exponentiel pour contourner ce problème.

Le lancement d’une instance Amazon EC2 est un appel mutant et est soumis à une limitation du taux de demandes et du débit de ressources. Le script que vous utilisez pour lancer les instances doit s’adapter au taux de recharge du compartiment de jeton.

Utilisez l’une des stratégies d’invocation différée ou de relance suivantes pour éviter les erreurs RequestLimitExceeded.

**Remarque :**Le kit AWS SDK pour .NET dispose d’un mécanisme de relance intégré qui est activé par défaut. Pour personnaliser les délais d’expiration, consultez la section Nouvelles tentatives et délais d’expiration.

L’exemple suivant inclut un mécanisme d’appel différé pour vos demandes. L’appel différé permet au compartiment de requêtes de se remplir :

# 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’exemple suivant inclut la logique de nouvelle tentative dans le 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)

Informations connexes

Limitation des demandes pour l’API Amazon EC2

Comportement des nouvelles tentatives

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an