可用性¶
■API Gateway¶
AWS API Gatewayの可用性について、公式ドキュメントを確認します。## AWS API Gatewayの可用性
SLA(サービスレベルアグリーメント)
AWSはAPI Gatewayについて、AWSリージョンごとの月間請求サイクルで月間稼働率99.95%以上を保証しています。この水準を下回った場合、以下のようにサービスクレジットが発生します。
月間稼働率が99.0%以上99.95%未満の場合はサービスクレジット10%、95.0%以上99.0%未満の場合は25%、95.0%未満の場合は100%が付与されます。クレジットの請求には、障害発生日時・リージョン・影響を受けたAPI ID・リクエストログなどの証拠を添えて、障害発生から2請求サイクル以内にAWSサポートへ申請する必要があります。
アーキテクチャ面での可用性
API Gatewayは完全マネージド型のリージョナルサービスとして、各AWSリージョン内の複数のアベイラビリティゾーン(AZ)にまたがって自動的に運用されています。AZ間は低遅延・高スループット・高冗長性のネットワークで接続されており、特定のAZで障害が発生しても自動的にフェイルオーバーする設計になっています。これにより、単一のデータセンターに依存する従来型のインフラよりも高い耐障害性を実現しています。
さらに高い可用性が求められる場合は、Route 53のヘルスチェックを使ってプライマリリージョンからセカンダリリージョンへDNSフェイルオーバーする、マルチリージョン構成を組むこともできます。
Sources:
- Amazon API Gateway Service Level Agreement
- Resilience in Amazon API Gateway - AWS公式ドキュメント
- Amazon API Gateway announces service level agreement
■CloudFront¶
Amazon CloudFrontの可用性¶
SLA(サービスレベルアグリーメント)
CloudFrontについては、月間稼働率99.9%以上が保証されています(サーバーエラー率をもとに算定)。この水準を下回った場合、稼働率99.0%以上99.9%未満でクレジット10%、95.0%以上99.0%未満で25%、95.0%未満で100%が付与されます。申請は障害発生から2か月以内に、具体的な日時とエラーログを添えてAWSサポートセンターへ「SLA Credit Request」の件名で行う必要があり、最低クレジット額は1ドル以上とされています。なお、顧客側の設定不備やS3以外のオリジン利用など一部条件下ではSLA対象外となる点に注意が必要です。
アーキテクチャ面での可用性
CloudFrontは世界中の多数のエッジロケーションで構成されるグローバルCDNであり、単一障害点を持たない分散構成が基本設計になっています。さらに可用性を高める仕組みとして、オリジンフェイルオーバー機能があります。これはプライマリオリジンとセカンダリオリジンの2つを1つの「オリジングループ」として設定し、プライマリが503(接続失敗)や504(タイムアウト)、あるいは400/403/404/416/429/500/502といった指定ステータスコードを返した場合に自動的にセカンダリオリジンへ切り替える仕組みです。
ただし、このフェイルオーバーはGET・HEAD・OPTIONSメソッドのみに対応しており、POST/PUTなどの書き込み系リクエストには適用されない点は制約として押さえておくとよいでしょう。接続タイムアウト(デフォルト10秒、最大3回試行)やレスポンスタイムアウト(デフォルト30秒)も調整可能です。
API Gatewayが「リージョン内AZ冗長」で可用性を担保するのに対し、CloudFrontは「グローバル分散+オリジンフェイルオーバー」という異なるレイヤーで可用性を実現している点が対照的です。
Sources:
- Amazon CloudFront Service Level Agreement
- Optimizing high availability with CloudFront origin failover - AWS公式ドキュメント
■ Cognito¶
Amazon Cognito(ユーザープール)の可用性¶
SLA(サービスレベルアグリーメント)
Cognitoについては、月間稼働率99.9%以上とすることにAWSが「商業的に合理的な努力」を払うと定められています(API GatewayやCloudFrontと同様、確約というより努力目標に近い表現です)。この水準を下回った場合、稼働率99.0%以上99.9%未満でクレジット10%、95.0%以上99.0%未満で25%、95.0%未満で100%が付与されます。申請は「発生月の次々月末日まで」にAWSサポートセンターへ「SLA Credit Request」の件名で提出する必要があります。なお、ユーザー側の不適切な運用やサービスリミット超過、Cognitoのベストプラクティスに従わなかった場合などはSLA対象外となる点に注意してください。
アーキテクチャ面での可用性
Cognitoはリージョナルサービスとして、リージョン内では自動的に複数AZにまたがって運用されています。加えて近年、マルチリージョンレプリケーション(MRR)という機能が追加され、別リージョンにレプリカのユーザープールを作成できるようになりました。
この仕組みでは、プライマリユーザープールとセカンダリユーザープールが同じユーザープールIDを共有します。プライマリは管理操作(ユーザー作成、パスワードリセットなど)の権威あるソースであり続け、セカンダリはプライマリの設定を継承しつつ、サインインやトークン発行といった認証系の読み取り操作を担当します。カスタムドメインを使う場合はRoute 53ヘルスチェックにより、プライマリが「不健康」と判定されると自動的にセカンダリへフェイルオーバーし、回復後はプライマリに自動復帰します。API/SDK利用時はアプリケーション側でヘルスチェック状態をもとに手動でルーティングを判断する必要があります。
ただし重要な制約として、セカンダリではユーザー新規作成・パスワードリセット・プロフィール変更ができず、TOTP MFAも非対応です。またこの機能はEssentialsまたはPlusプランが前提で、Liteプランでは利用できません。
3サービスを比較すると、API Gatewayはリージョン内AZ冗長、CloudFrontはグローバルエッジ分散+オリジンフェイルオーバー、Cognitoはリージョン内AZ冗長に加えて近年マルチリージョンレプリケーションが追加された、という構図になっています。
Sources:
- Amazon Cognito Service Level Agreement
- Multi-Region replication for user pools - Amazon Cognito Developer Guide
- Amazon Cognito Announces 99.9% Service Level Agreement
- Improve your application resilience with Amazon Cognito multi-Region replication