スキップしてコンテンツを表示

PowerShell を使用して複数の Amazon EC2 インスタンスをプログラムで起動するときに、"RequestLimitExceeded" エラーをトラブルシューティングする方法を教えてください。

所要時間2分
0

PowerShell を使用して複数の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動すると、"RequestLimitExceeded" エラーが発生します。

解決策

EC2 インスタンスの起動に使用するスクリプトは、API リクエストレートクォータおよび API リソースレートクォータに準拠する必要があります。これらのクォータを超過すると、"RequestLimitExceeded" エラーが発生します。

この問題を解決するには、再試行ロジックとエクスポネンシャルバックオフ戦略を実装してください。

**注: ** デフォルトでは、AWS SDK for .NET に組み込みの再試行メカニズムが備わっています。

**前提条件: **

リクエストレートが予測可能で、事前に制御できる場合は、スロットリングが発生したときに遅延した呼び出しを使用して回復してください。

スクリプト例:

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

**注: ** AMI_ID を Amazon マシンイメージ (AMI) ID に、Subnet_ID をサブネット ID に、m5a.large をインスタンスタイプに置き換えてください。また、10 を起動するインスタンスの最小数に、15 を起動するインスタンスの最大数に置き換えてください。

リクエストレートが予測できない場合は、スクリプトに再試行ロジックを含めてください。

スクリプト例:

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

**注: ** AMI_ID を AMI ID に、Subnet_ID をサブネット ID に、m5a.large をインスタンスタイプに置き換えてください。また、40 を起動するインスタンスの最小数に、50 を起動するインスタンスの最大数に置き換えてください。

関連情報

Request throttling for the Amazon EC2 API (Amazon EC2 API のリクエストスロットリング)

再試行動作

AWS公式更新しました 5ヶ月前
1コメント

This article was reviewed and updated on 2026-03-09.

エキスパート

応答済み 11日前

関連するコンテンツ