[アップデート] Amazon Cognito の API レート制限をセルフサービスでプロビジョニングできるようになりました
いわさです。
Amazon Cognito ではユーザープール内の API 操作に対してリージョンごとのレート制限(1秒あたりの最大リクエスト数)が設定されています。
API 操作は UserAuthentication や UserCreation などのカテゴリに分類され、カテゴリごとに共有のレート制限が適用されます。
デフォルトのレート制限を超えるトラフィックが見込まれる場合、追加のキャパシティを購入する必要があります。
2024 年 1 月にプロビジョンドキャパシティの仕組みが導入され、有償でデフォルトより高いリクエストレートを設定できるようになっていました。
ただ、当時は制限の変更に Service Quotas を通じた引き上げリクエストが必要で、手動レビューを経る必要がありました。
トラフィックスパイクが予想される場合には事前に計画的に制限の引き上げを申請しておく必要があったということです。
先日のアップデートで、プロビジョンドレート制限をセルフサービスでオンデマンドに調整できるようになりました。
Amazon Cognito コンソールまたは新しいプロビジョニング API(GetProvisionedLimit、UpdateProvisionedLimit)を使って、アカウントレベルの上限値の範囲内で即座にレート制限を変更できます。
今回こちらを確認してみたので紹介します。
仕組みを確認してみる
今回のアップデートで追加されたセルフサービスのプロビジョニングモデルは、2 層構造になっています。
公式ドキュメントによると、「アカウントレベルの最大制限(Account-level max limit)」と「プロビジョンド制限(Provisioned limit)」の 2 つがあるようです。
Account-level max limit: The maximum rate that you can provision, set through Service Quotas. To increase your account-level max limit, submit a quota increase request in the Service Quotas console.
Provisioned limit: The rate, in requests per second (RPS), that Amazon Cognito currently enforces for your account. You can adjust this value up to your account-level max limit with the Amazon Cognito provisioning API operations.
アカウントレベルの最大制限は Service Quotas で管理される上限枠で、プロビジョンド制限はその範囲内で実際に適用されるレートです。
例えば UserAuthentication カテゴリのアカウントレベル最大制限が 500 RPS の場合、UpdateProvisionedLimit で 300 RPS に設定したり、不要になったらデフォルト値に戻したりできます。
デフォルトを超えた分のみ課金され、使用時間に基づいて按分されるとのこと。
料金体系は 2024 年のプロビジョンドキャパシティ導入時から変わっていないようなので、詳細は過去記事を参照してください。
コンソールでの操作
Amazon Cognito コンソールのユーザープール画面に「Provisioned limits」タブが新しく追加されています。
「新規」バッジが付いているので今回のアップデートで追加されたものみたいですね。

タブを開くとプロビジョンド制限の管理画面が表示されます。
「This is an account-level setting. Changes apply to all user pools in this region.」とある通り、ユーザープール個別ではなくアカウント・リージョン単位の設定です。

API カテゴリをドロップダウンから選択する形式で、ClientAuthentication、UserAccountRecovery、UserAuthentication など全 11 カテゴリが確認できます。

カテゴリを選択すると、Default limit、Provisioned limit、Billed capacity、Adjustability を確認できます。

UserAuthentication カテゴリを見てみると、Default limit が 120 RPS、Provisioned limit も 120 RPS で、「Edit provisioned limit」ボタンが表示されています。
ボタンを押して編集画面に入ってみました。

確認してみると Account-level max limit も 120 RPS になっています。
入力欄には「Must be between 120 and 120」と表示されており、つまりデフォルトの状態では上げることができません。
「Need a higher maximum? Request an increase」のリンクから Service Quotas での引き上げリクエスト画面に遷移します。
なお、公式ドキュメントには以下の記載があります。
The quota for each category is measured in Monthly Active Users (MAUs). AWS accounts with fewer than two million MAUs can operate within the default quota. If you have less than one million MAUs and Amazon Cognito is throttling requests, consider optimizing your app.
2024 年の過去記事でも紹介されていたとおり、Cognito のクォータは従来 MAU に応じて段階的に引き上がる仕組みでした(例:UserAuthentication は 100 万 MAU 追加ごとに 40 RPS 増加)。
今回の検証アカウントで Account-level max limit がデフォルトのまま変更できなかったのも、MAU が基準に達していないため Account-level max limit 自体が引き上がっていない状態だったのだと思います。
また、マネージドログインユーザーに関する注意メッセージも表示されています。
「Managed login users: request a managed login limit increase from AWS Support before updating this value.」とのことで、マネージドログインを使っている場合は AWS Support への別途リクエストが必要みたいです。
If your user pool uses managed login, you can't use the provisioning API to adjust the UserAuthentication or UserFederation categories. To increase these quotas, submit a Service Quotas increase request through the Service Quotas console or use the Service limit increase form.
実際に上限を超える値を設定してみる
別のカテゴリ(UserRead)でも試してみました。
こちらも Account-level max limit が 120 RPS のままなので、121 を入力するとバリデーションエラーになります。

「Value must be between 120 and 120.」と怒られます。
調整できないカテゴリ
すべてのカテゴリがプロビジョニング対象というわけではありません。
例えば UserList カテゴリを見ると、Adjustability が「Not adjustable」と表示されています。

このカテゴリはデフォルトの 30 RPS 固定で、プロビジョニングも Service Quotas での引き上げもできないようです。
なお、プロビジョニング API 自体のレート制限は 1 RPS/アカウントで、呼び出しはすべて AWS CloudTrail に記録されるとのこと。
さいごに
本日は Amazon Cognito の API レート制限をセルフサービスでプロビジョニングできるようになったアップデートを確認してみました。
コンソールに専用の「Provisioned limits」タブが追加されて、各カテゴリの制限状況が見やすくなりました。
ただ、実際にプロビジョンド制限を上げるには Account-level max limit が上がっている必要があり、MAU が少ないアカウントではデフォルトのまま何も変更できない状態でした。たぶん。
大規模に利用している環境で試してみたいですね。








