Elastic Beanstalk で API スロットリングまたは「速度を超過しました」エラーを解決する方法を教えてください。

最終更新日: 2019 年 10 月 17 日

AWS Elastic Beanstalk を使用しているときに、API スロットリングまたは「Rate exceeded (速度を超過しました)」エラーを解決する方法を教えてください。

簡単な説明

AWS のサービスへの API 呼び出しは、アカウントごとおよび AWS リージョンごとに許可される最大 API リクエストレートを超えることはできません。呼び出しがアプリケーション、AWS コマンドラインインターフェイス (AWS CLI)、AWS マネジメントコンソールのいずれから来たかは関係ありません。API リクエストが最大レートを超えると、「速度を超過しました」エラーが表示され、API 呼び出しが調整されます。

Elastic Beanstalk に直接行われた API 呼び出しや、Elastic Beanstalk が管理する他の AWS のサービス (AWS CloudFormation など) からエラーを受け取ることができます。

解決方法

「速度を超過しました」エラーとスロットリングを防止または解決するには、以下の解決策を試してください。

どの API コールがスロットリングされているかを検証する

1.    Elastic Beanstalk イベントストリームで、スロットリングエラーを特定します。エラーが発生した時間枠を書き留めます。

注意: API 呼び出しが Elastic Beanstalk の外部のアプリケーションまたはスクリプトから行われている場合、アプリケーションログで時間枠を探します。

2.    RequestLimitExceeded エラーのある時間枠で見つかったリクエストについては、AWS CloudTrail を使用してイベントを表示し、eventNameeventSource (サービス)、userAgent を検証します。

Elastic Beanstalk 環境の「describe」呼び出しを検証する

「describe」呼び出しが多すぎると、許可されたリクエストレートに対して測定された API リクエストの総数に影響してきます。

たとえば、Elastic Beanstalk 環境で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを検出するための「describe」呼び出しを検証するには、次のいずれかの方法を使用します。

EnvironmentResourceDescription を使用します。次の例を参照してください。

$ aws ec2 describe-instances --filters Name="tag:elasticbeanstalk:environment-id",Values="Your_Environment_ID"

-または-

Elastic Beanstalk タグのフィルターで DescribeInstances API 呼び出しを使用します。次の例を参照してください。

$ aws ec2 describe-instances --filters Name="tag:elasticbeanstalk:environment-name",Values="Your_Environment_Name"

注意: DescribeInstances API 呼び出しレートは、EnvironmentResourceDescription API 呼び出しよりも高いレート制限を持つ傾向があります。

サードパーティーアプリケーションからの呼び出しを確認する

サードパーティーアプリケーションは、Elastic Beanstalk または Elastic Beanstalk が管理する他の AWS のサービスを継続的に呼び出すことができます。

サードパーティーアプリケーションが Elastic Beanstalk サービスまたは Elastic Beanstalk 統合サービスに対して不要な呼び出しを行っていないことを確認するには、CloudTrail を使用して API 呼び出しを行うユーザーエージェントを確認します。

注意: DatadogNew Relic などのサードパーティーアプリケーションは、Elastic Beanstalk に API 呼び出しを行うことができます。詳細については、「Datadog」または「New Relic」のレート制限アラートを参照してください。サードパーティーアプリケーションは AWS でサポートされていません。

エラーの再試行とエクスポネンシャルバックオフを使用する

エラーの再試行と指数バックオフを使用して、API 呼び出しのレートを制限します。

注意: 各 AWS SDK は、自動再試行ロジックとエクスポネンシャルバックオフアルゴリズムを実装しています。

AWS サポートセンターでサービス制限の引き上げをリクエストする

サービス制限の引き上げをリクエストする前に、以下を完了してください。

  • API 呼び出しと呼び出しレートを特定します。
  • エラーの再試行またはエクスポネンシャルバックオフを使用してみてください。
  • サービス制限の引き上げのリクエストには、AWS リージョン、スロットリングの問題に関連する期間枠、サービス制限の引き上げのユースケースを含めます。

サービス制限の引き上げをリクエストします。