API Gatewayの耐障害性を考える
はじめに
この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧はこちら。
この記事ではAPI Gatewayを耐障害性の観点から超詳細解説しています。
具体的には以下流れで説明します。
- API Gatewayとは
- API Gatewayを更新するときのダウンタイム
- API Gatewayのスケーラビリティ
AWSの区分でいう「Level 200:トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。
この記事を読んでほしい人
- API Gatewayを採用するときのベストプラクティスを説明できるようになりたい人
- API Gatewayの耐障害性に不安を感じている人
- AWS Certified DevOps Engineer Professionalを目指している人
API Gatewayとは
AWS API Gatewayは、簡単かつ効果的なAPIの作成・管理を可能にするサービスです。
RESTfulなAPIやWebSocketを素早くデプロイし、スケーラビリティやセキュリティも確保します。
Lambdaや他のAWSサービスと統合し、サーバーレスなアーキテクチャを構築できます。
AWS API Gatewayには3つのエンドポイントタイプがあります。
まず、Edge-Optimizedは、クライアントに最も近いAWS Edge LocationでAPIをホストし、低レイテンシーでアクセスできます。
デフォルトではEdge-Optimizedなのでパブリックに公開したくない場合は後述するPrivateタイプでAPIを作る必要があります。
次に、Regionalは特定のAWSリージョン内にAPIを展開し、そのリージョン内のすべてのエンドユーザーに向けて高パフォーマンスな接続を提供します。
そして、PrivateはVPC内でAPIをホストし、パブリックインターネットを経由せずにプライベートネットワーク内でアクセス可能です。
これらのエンドポイントタイプを使い分けることで、要件に最適なアーキテクチャを実現できます。
API Gatewayを更新するときのダウンタイム
API GatewayはAPI Gateway自体に変更を加えるだけでは環境に変更が反映されません。
変更を環境に反映させるためにはデプロイメントと呼ばれる作業が必要です。
そして、このデプロイメントをベストプラクティスに沿って使うとAPI Gatewayを更新する際のダウンタイムを最小化できるため以降で詳細に説明します。
API Gatewayのステージ変数
API Gatewayのデプロイメントを理解するためにはステージという概念が大切です。
API Gatewayのステージは、APIのエンドポイントURL単位に作成するデプロイメント単位です。
上図のように複数のステージを持つことができ、それぞれに設定をカスタマイズできます。
この設定をカスタマイズする際に利用するのがステージ変数です。
ステージ変数はAPI Gatewayのステージごとに設定できる環境変数で、更新頻度の高いパラメータを定義するために使います。
例えば、API Gatewayとセットで使うことが多いLambdaを例にとると、LambdaのエイリアスARNをステージ変数に定義することがベストプラクティスです。
Lambdaと同様、環境変数であるステージ変数を使うことで変数を更新するたびにAPI Gateway自体の再構築が不要となるので更新に伴うダウンタイムが短くなります。
API Gatewayのカナリアリリース
API Gatewayはカナリアリリースも可能です。
カナリアリリースをするときには既存のステージに結び付くCanaryと呼ばれる特別なステージを作成してリリースします。
あるステージに対してCanaryステージを定義するとデプロイ操作がいったん、Canaryのみに行われます。
その後、トラフィックをシフトしてメインにもデプロイを反映する昇格か変更を切り戻す削除化を選ぶことができます。
API Gatewayのスケーラビリティ
クラウドでAPIを提供するときには想定した性能を発揮させるために、スロットリングに注意する必要があります。
具体的には、API Gatewayはリージョンごとに10,000 リクエスト/秒しか裁くことができません。
そのため、API Gatewayではスロットリングの設定を適切に行ない、特定のAPIに対してトラフィックがバーストした際でもほかのAPIに影響を出さないようにすることがベストプラクティスです。
API GatewayのスロットリングはLambdaの同時実行数のように、スロットリング目標を設定して対処します。
具体的には使用量プランを用いてAPIとステージレベルのスロットリング目標を設定する、あるいは使用料プランを用いてメソッドレベルのスロットリング目標を設定することが可能です。
まとめ
この記事ではAPI Gatewayを耐障害性の観点から超詳細解説しました。
- API Gatewayとは
- API Gatewayを更新するときのダウンタイム
- API Gatewayのスケーラビリティ
次回はECSの耐障害性を考えます。
Discussion