SRE Journey
← 記事一覧
クラウドAWS Architecture Blog

Multi-region disaster recovery for Amazon API Gateway WebSocket APIs

API Gateway WebSocket APIをマルチリージョンで自動フェイルオーバーさせる設計パターン

AWS

要点

  • Route 53のフェイルオーバールーティングと共通カスタムドメインで、プライマリ/セカンダリのactive-passive構成をとる。クライアントは同じドメインに再接続するだけでよい。
  • 状態は接続ではなくDynamoDB Global Tablesに保存し、非同期レプリケーションでセカンダリへ複製する。直前の書き込みは届かない可能性があり、状態はconnection IDでなくユーザーIDで管理する。
  • 1分ごとのcanary Lambdaが実際にWebSocket接続とheartbeatを試し、CloudWatchカスタムメトリクスに記録する。2回連続で異常ならアラームが発火し、Route 53がDNSをセカンダリへ切り替える。
  • クライアントはheartbeatの連続失敗を検知して接続を閉じ、指数バックオフとfull jitterで再接続する。再接続後はgetStateで状態を復元し、thundering herdを避ける。
  • Lambdaの予約同時実行数を0にして障害を再現するデモ付き。約2分で検知してフェイルオーバーし、復旧後は自動でフェイルバックする。本番ではフェイルバック閾値を高めにしてflappingを防ぐことを勧めている。

元記事:Multi-region disaster recovery for Amazon API Gateway WebSocket APIs(AWS Architecture Blog)↗