【ITニュース解説】Amazon Cognito Pricing: Tiers, MAU Counting, and the Defaults That Inflate the Bill
2026年10月13日に「Dev.to」が公開したITニュース「Amazon Cognito Pricing: Tiers, MAU Counting, and the Defaults That Inflate the Bill」について初心者にもわかりやすく解説しています。
ITニュース概要
Amazon Cognitoはユーザー管理サービスで、月間アクティブユーザー(MAU)数と選択した料金プランにより課金される。デフォルト設定やバッチ処理、トークン更新などが予期せぬMAU増加を招き、高額な請求につながるケースがある。適切な料金プランの選択や運用方法を理解し、設定を見直すことでコストを最適化できる。
ITニュース解説
Amazon Cognitoは、Webアプリケーションやモバイルアプリケーションでユーザーのサインアップ、サインイン、アクセス管理などを簡単にするためのサービスである。開発の初期段階では無料枠があるため、コストを気にせず利用を始めることが多いが、プロジェクトが成長したり、特定の操作を行ったりすると、予期せぬ高額な請求が発生することがある。これは、Cognitoの料金が、単にユーザー数やアクセス数だけで決まるわけではない複雑な要因に左右されるためである。
Cognitoの料金は主に「月間アクティブユーザー(MAU)」という単位で計算される。MAUとは、その暦月中にアプリケーションがユーザーに対して何らかの「ID操作」を生成したユーザーのことである。無料枠を超えたMAUに対して料金が発生し、その単価はユーザープールの「ティア(Feature Plan)」によって異なる。ティアには「Lite」「Essentials」「Plus」の3種類がある。
Liteティアは最も安価で、パスワード認証、ソーシャルログイン、多要素認証、Lambdaトリガーなどの基本的な機能を提供する。無料枠は10,000MAUで、その上限を超えると10万MAUまでは1MAUあたり0.0055ドル、それ以降は0.0046ドルかかる。 Essentialsティアは、マネージドログイン画面、パスキー、メール多要素認証などの追加機能を提供する。無料枠は同じく10,000MAUだが、料金は1MAUあたり0.015ドルとLiteティアの約3倍である。 Plusティアは、脅威保護(不正なログイン検知など)といった高度なセキュリティ機能を提供するが、無料枠はなく、1MAUあたり0.020ドルと最も高価である。
ここで重要なのは、新しいユーザープールを作成する際、特に指定しなければデフォルトでEssentialsティアが選択されることである。もしアプリケーションがEssentialsティアの追加機能を使っていなければ、Liteティアで大幅にコストを削減できる可能性がある。例えば、10万MAUの場合、Liteティアなら月495ドルだが、Essentialsティアだと月1,350ドルにもなる。そのため、既存のユーザープールのティアを確認することは、コスト削減のための最も簡単な第一歩となる。
さらに料金を複雑にするのは、MAUとしてカウントされる「ID操作」の範囲である。単にユーザーがサインインするだけでなく、サインアップ、サインアウト、トークンのリフレッシュ、パスワード変更、ユーザー属性の更新なども含まれる。また、管理者がユーザーを作成したり更新したりする操作、あるいは管理者が特定のユーザーの情報を参照する「AdminGetUser」というAPI呼び出しもMAUとしてカウントされる。ユーザーが一度MAUとしてカウントされれば、その月の追加操作で費用が増えることはない。しかし、ユーザーが実際にアプリケーションを使っていない場合でも、これらの操作によってMAUとしてカウントされ、課金対象となることがあるため注意が必要だ。
予期せぬ高額請求につながる典型的なパターンがいくつかある。 一つ目は、バッチジョブがすべてのユーザーデータを読み取るケースである。例えば、夜間に実行されるジョブが、レポート作成のためにCognitoのAdminGetUser APIを使ってユーザープール内の全ユーザーの情報を読み込む場合、その月にサインインしていないユーザーであっても、全員がMAUとしてカウントされてしまう。もし30万ユーザーがいて、実際にサインインしているのが6万ユーザーだけでも、ジョブが全員を読み込めば30万MAUとして課金される。この問題を避けるためには、ユーザー属性をアプリケーション側で別途データベースに保持し、CognitoのLambdaトリガーやアプリケーションからの属性更新で同期する仕組みを検討するとよい。
二つ目は、アプリケーションがタイマーでトークンをリフレッシュするケースである。トークンのリフレッシュもID操作の一つとしてMAUにカウントされる。もしモバイルアプリが起動時やバックグラウンドタスクで定期的にトークンをリフレッシュするように設定されていると、そのアプリがインストールされているすべてのデバイスが、ユーザーが実際に操作していなくても毎月MAUとしてカウントされてしまう可能性がある。対策としては、API呼び出しが必要になったときだけトークンをリフレッシュするように実装を見直すことが重要である。
三つ目は、既存のユーザーデータを新しいCognitoプールに一括で移行するケースである。AdminCreateUser APIを使って大量のユーザーを一括で作成すると、その月のMAUとしてすべてがカウントされ、高額な請求につながる。この場合、「Migrate User Lambdaトリガー」という機能を利用するのが有効である。これは、ユーザーが新しいプールにまだ存在しない状態でサインインしようとした際にトリガーが発火し、旧システムからユーザー情報を取得してCognitoにユーザーを作成する仕組みだ。こうすることで、実際にサインインに戻ってきたユーザーのみが作成され、課金対象となる。
四つ目は、ロードテストで多数のテストユーザーを使用するケースである。テストアカウントも実際のユーザーと同様にMAUとしてカウントされるため、ロードテストで多数のユーザーをサインインさせると、その月のMAUが跳ね上がり、予期せぬ費用が発生する。
さらに、無料枠についても誤解しやすい点がある。Cognitoの無料枠は、AWSアカウントごと、またはAWS組織ごとに適用される。つまり、開発環境、ステージング環境、本番環境でそれぞれ10,000MAUの無料枠があるわけではなく、すべてのアカウントで合計10,000MAUの無料枠を共有することになる。このため、開発環境でのテストが本番環境の無料枠を使い切ってしまう可能性もある。また、Plusティアには無料枠が全くなく、フェデレーテッドユーザー(SAMLやOIDC経由でサインインするユーザー)にも50MAUという非常に少ない無料枠しかなく、料金も別途設定されている点にも注意が必要だ。
月の途中でユーザープールのティアを変更する際も注意が必要だ。もし月にLiteティアで運用していたプールを、数日間だけPlusティアに変更し、その後Liteティアに戻した場合、その数日間にアクティブだったユーザー全員が、最も高価なPlusティアの料金で課金されてしまう。ティアの評価やテストは、必ず別のテストプールで行うべきである。
MAU課金以外のコストも存在する。 機械対機械(M2M)認証では、アプリケーションが別のサービスにアクセスするためのトークンを取得する際、成功したトークン応答ごとに課金される。もしサービスがトークンをキャッシュせずに毎回新しいトークンを要求している場合や、トークンの有効期限が短すぎる場合は、膨大な数のトークン応答が発生し、高額な請求につながる。トークンは有効期限が切れるまでキャッシュし、有効期限も適切に設定することが重要である。
SMSメッセージの送信は、多要素認証やパスワード回復などで利用されるが、これはCognito自体ではなく、Amazon SNSという別のサービスを通じて課金される。SMSの料金は送信先の国によって大きく異なり、悪意のある攻撃によって大量のSMSが送信されるリスクもある。これを防ぐために、Amazon SNSのSMS利用上限額を設定したり、AWS WAFを使って不正なサインアップやパスワード回復の試みを制限したりする対策が必要だ。また、可能な場合はSMSよりも認証アプリやEメールコードの利用を推奨する。
古いCognitoプールで「高度なセキュリティ機能(ASF)」が有効になっている場合、これも個別の追加料金として請求されることがある。Plusティアには同じセキュリティ機能が含まれており、多くのケースでLiteティアとASFを組み合わせるよりもPlusティアに移行した方が総コストを削減できる可能性がある。
マルチリージョンレプリケーションも追加のアドオン料金が発生する。これは災害対策のためにユーザーデータを複数のAWSリージョンに同期する機能だが、有効にしただけでMAUごとに料金が発生するため、必要性を十分に検討し、意図的に有効化するべきである。
これらのコストを効果的に管理するためには、いくつかの対策が考えられる。 まず、ユーザープールのティアは、TerraformやAWS CDKのようなインフラストラクチャ・アズ・コード(IaC)を使って明示的にコードで設定すること。デフォルトのEssentialsティアではなく、アプリケーションが必要とする機能に基づいて最適なティアを選択する。 次に、既存のユーザープールのティアや設定を定期的に確認するスクリプトを実行し、意図しない高価な設定になっていないかをチェックする。 そして、AWS BudgetsやAWS Cost Anomaly Detectionのようなツールを活用し、Cognitoサービスの予算を設定したり、予期せぬ費用増加を自動で検知したりする仕組みを導入する。これにより、問題が発生した月に早期に気づき、対処することが可能になる。
Cognitoの費用は、単なる利用者の増加ではなく、初期の設計段階でのティアの選択、MAUのカウント方法を考慮しないバッチ処理やトークンリフレッシュのロジック、無料枠への誤解、そして移行やテストの方法など、一度きりの決定や設定ミスによって急増することが多い。システムエンジニアとしては、これらの点を理解し、設計段階から適切な設定と運用を心がけることが、コストを予測可能にし、予期せぬ高額請求を避けるために非常に重要となる。