API レート制限は、Google Compute Engine API に対して実行できるリクエストの数を規定するもので、プロジェクトごとに適用されます。gcloud compute
または Google Cloud Platform Console を使用する場合も、この API に対してリクエストを行うため、これらのリクエストの数も API レート制限で計上されます。また、サービス アカウントを使用して API にアクセスする場合も、レート制限に計上されます。
現在、プロジェクトに適用される API レート制限は、以下のカテゴリに限られています。制限はカテゴリごとに個別にカウントされるため、それぞれのカテゴリの最大制限を同時に適用できます。レート制限は 100 秒単位で適用されます。たとえば、20 リクエスト/秒という制限は、100 秒間当たりでは 2000 件のリクエストに相当します。つまり、100 秒間のうちのある時点で特定の制限に達した場合、割り当てバケットが更新されるまで待たないと、それ以上のリクエストを実行できません。
- クエリ -
*.get
メソッドと*.list
メソッドを除くすべてのメソッドを対象とした制限- プロジェクトあたりのレート: 20 リクエスト/秒
- ユーザーあたりのレート: 20 リクエスト/秒
- 読み取りリクエスト -
*.get
メソッドを対象とした制限- プロジェクトあたりのレート: 20 リクエスト/秒
- ユーザーあたりのレート: 20 リクエスト/秒
- リスト リクエスト -
*.list
メソッドを対象とした制限- プロジェクトあたりのレート: 20 リクエスト/秒
- ユーザーあたりのレート: 20 リクエスト/秒
- オペレーション読み取りリクエスト -
*OperationsService.Get
メソッドを対象とした制限- プロジェクトあたりのレート: 20 リクエスト/秒
- ユーザーあたりのレート: 20 リクエスト/秒
- 重い読み取りリクエスト -
*.AggregatedList
メソッドを対象とした制限- プロジェクトあたりのレート: 10 リクエスト/秒
- ユーザーあたりのレート: 10 リクエスト/秒
- 重いミューテーション リクエスト -
InterconnectsService
機能とInterconnectAttachmentsService
機能でのpatch
、delete
、およびinsert
メソッドを対象とした制限- プロジェクトあたりのレート: 10 リクエスト/秒
- ユーザーあたりのレート: 10 リクエスト/秒
- インスタンス
SimulateMaintenanceEvent
のリクエスト -*.SimulateMaintenanceEvent
メソッドを対象とした制限- プロジェクトあたりのレート: 2 リクエスト/秒
- ユーザーあたりのレート: 2 リクエスト/秒
- ライセンス挿入リクエスト -
*.LicensesService.Insert
メソッドを対象とした制限- プロジェクトあたりのレート: 2 リクエスト/秒
- ユーザーあたりのレート: 2 リクエスト/秒
API リクエストのレート制限を引き上げる必要がある場合は、Google Cloud Platform Console から申請できます。
おすすめの方法
Google Compute Engine で API レート制限に対処するには、次の方法をおすすめします。
バースト機能は慎重かつ選択的に使用します。バーストとは、短時間の間、特定のクライアントに多数の API リクエストの実行を許可する動作を指します。一般には、アプリケーションが通常より多くのトラフィック量を処理する必要があるといった例外的なシナリオに対処するために行われます。バースト機能は瞬く間に API レート制限を使い果たすため、必要な場合に限って使用するようにしてください。
クライアント側レート制限機能を使用します。クライアント側レート制限機能は人為的な制限を設定して、問題になっているクライアントが割り当てのうちの一定量しか使用できないようにします。これにより、1 つのクライアントが割り当てのすべてを使い尽くすことを防止できます。
指数バックオフを使用し、割り当てに達するとリクエストの実行間隔が徐々に延びるようにします。これにより、サーバーで割り当てバケットを補充する時間が得られます。
クライアントがサーバーからのレスポンスを待たずに継続的にリクエストを送信するといった、短い間隔でのポーリングを行わないようにします。短い間隔でポーリングを行うと、不適切なリクエストの捕捉がより困難になります。こうしたリクエストは有用なデータを返すことがなくても、割り当てには計上されます。
アプリケーションを複数のプロジェクトに分割します。割り当てはプロジェクト レベルで適用されるため、アプリケーションを分割すれば、各アプリケーションが専用の割り当てプールを使用できます。
403 エラーが発生して
rateLimitExceeded
というエラー メッセージが表示された場合は、しばらく待ってからリクエストを再試行します。割り当てバケットは 100 秒ごとに補充されるため、この間隔を過ぎればリクエストは成功するはずです。