コンテンツにスキップ

Amazon API Gateway

1. サービス概要

Amazon API Gateway は、開発者が任意の規模で API の作成、公開、保守、監視、保護を容易に行えるフルマネージドサービスである。
RESTful API や WebSocket API を構築でき、バックエンドのロジックを抽象化し、API を通じて多様なアプリケーションと連携することを可能にする。
これにより、開発者はビジネスロジックに集中でき、API インフラの構築やスケーリングの複雑さを軽減できる。

主なユースケースとして、

  • Web アプリケーション
  • モバイルアプリケーション
  • IoT デバイス、マイクロサービス
  • B2B 連携

などが挙げられます。
API Gateway は、これらの多様なクライアントとバックエンドサービスの間を取り持ち、効率的でセキュアなデータ交換を実現する。

2. 主な特徴と機能

2.1 API タイプ

API Gateway は、以下の 2 つの主要な API タイプをサポートする。

  • RESTful API: HTTP ベースのリクエスト/レスポンスモデルに基づいた API で、最も一般的な Web API の形式である。CRUD 操作に対応し、様々なデータ形式(JSON, XML など)を扱えます。
  • WebSocket API: 双方向のリアルタイム通信をサポートする API である。チャットアプリケーションやリアルタイムデータストリーミングなどに適している。

2.2 API Gateway の主なコンポーネント

API Gateway の動作を理解する上で重要な要素は、以下の通りである。

  • リソース(Resource): API を通してアクセス可能なデータや操作の単位である。例えば、/users/products/{id}など、URL パスで定義される。
  • メソッド(Method): リソースに対して実行可能なアクションである。HTTP メソッド(GET, POST, PUT, DELETE など)で定義される。
  • 統合(Integration): API リクエストをバックエンドサービス(Lambda 関数、HTTP エンドポイント、AWS サービスなど)に転送する設定である。
  • モデル(Model): API のリクエストとレスポンスの構造を定義する。JSON Schema を利用してバリデーションやドキュメント生成に使用する。
  • ステージ(Stage): API のデプロイメントの環境(例:dev, test, prod)。ステージごとに異なる設定(認証、環境変数など)を適用できる。

2.3 カスタムオーソライザー(Custom Authorizer)

カスタムオーソライザー(Lambda Authorizer)を利用することで、API に対する認証・認可のロジックを Lambda 関数で実装し、API Gateway に統合できる。
これにより、トークンベースの認証(JWT、OAuth2.0 など)や、複雑な認可ルールを柔軟に適用できる。

2.4 API キャッシング(API Caching)

API Gateway は API レスポンスをキャッシュすることで、バックエンドへの負荷を軽減し、API パフォーマンスを向上させることが可能である。
キャッシュ TTL(有効期限)を設定でき、キャッシュされたレスポンスを返すことで、バックエンドサービスへのリクエスト数を減らすことができる。

2.5 スロットリング(Throttling)

API Gateway では、API へのリクエスト数を制限することで、バックエンドシステムの過負荷を防ぎ、可用性を向上させることができる。
リクエストレートとバーストレートを設定でき、API リクエストを段階的に処理できる。

2.6 API モニタリングとロギング

CloudWatch Logs と連携して、API のアクセスログと実行ログを収集し、API のパフォーマンスやエラーを監視できる。
CloudWatch メトリクスを利用して、API のリクエスト数、レイテンシー、エラー率などの情報を可視化できる。

2.7 統合性と拡張性

API Gateway は、Lambda、EC2、S3、DynamoDB などの AWS サービスと統合でき、AWS CodeBuild や AWS CodeDeploy と連携して CI/CD パイプラインを構築できる。
また、Swagger/OpenAPI 定義をインポート/エクスポートでき、API 定義の共有や API ドキュメントの自動生成が可能である。

3. アーキテクチャおよび技術要素

  1. クライアントは API Gateway のエンドポイントにリクエストを送信。
  2. API Gateway はリクエストを認証・認可し、リクエストの変換やマッピングを実施。
  3. 統合設定に基づき、リクエストをバックエンドサービス(Lambda 関数、HTTP エンドポイントなど)へ転送。
  4. バックエンドサービスからのレスポンスを API Gateway が受け取り、レスポンスを変換・マッピングし、クライアントへ返却。
  5. API Gateway はフルマネージドサービスであり、スケーラビリティと可用性が内包されています。API Gateway は、複数のアベイラビリティゾーンにまたがって API をデプロイすることで、高可用性を実現している。

4. セキュリティと認証・認可

API Gateway は API を保護するために、以下のセキュリティ機能を提供する:

  • IAM 認証: IAM ロールやユーザーを利用して API へのアクセスを制御する。
  • カスタムオーソライザー: Lambda 関数を利用して、トークンベースの認証やカスタム認証ロジックを実装する。
  • API キー: API キーを使用して、特定のユーザーやアプリケーションからのアクセスを制限する。
  • リソースポリシー: リソースポリシーを設定することで、特定の IP アドレスからのアクセスを制限できる。
  • HTTPS エンドポイント: TLS 暗号化により、API 通信を保護する。

これらのセキュリティ対策により、API への不正アクセスを防止し、機密性の高いデータを保護できる。

5. 料金形態

API Gateway の料金は主に以下に基づきます:

  • API リクエスト数: API へのリクエスト数に応じた従量課金。
  • データ転送量: API Gateway との間で転送されるデータ量に応じた課金。
  • キャッシュ利用料: API キャッシング機能を利用した場合の利用料。
  • WebSocket 接続時間: WebSocket API の場合、接続時間に応じた課金。

6. よくあるアーキテクチャ・設計パターン

一般的なパターンは以下の通りです:

  • マイクロサービスアーキテクチャ: API Gateway をマイクロサービスのフロントエンドとして使用し、複数のサービスへのアクセスを統合。
  • サーバーレスアプリケーション: Lambda 関数をバックエンドとするサーバーレスアプリケーションを構築し、API Gateway で HTTP エンドポイントを公開。
  • モバイルアプリケーションのバックエンド: モバイルアプリから API Gateway 経由で、データベースや他の AWS サービスへ安全にアクセス。
  • B2B 連携: パートナー企業と安全にデータ交換を行うための API を公開。
  • API ファースト開発: Swagger/OpenAPI 仕様に基づいた API を設計し、API Gateway を通して実装とテストを同時に進行。

7. 設定・デプロイ手順(ハンズオン例)

  1. AWS マネジメントコンソールから API Gateway サービスを開き、新しい API を作成。
  2. リソース(Resource)とメソッド(Method)を定義し、バックエンドサービス(Lambda 関数、HTTP エンドポイントなど)との統合を設定。
  3. リクエスト/レスポンスのマッピング設定や認証・認可の設定を行う。
  4. API をデプロイするためのステージを作成。
  5. 作成した API エンドポイントをテストし、必要に応じて設定を変更。
  6. API を公開し、クライアントアプリケーションからアクセスする。

8. 試験で問われやすいポイント

8.1 API タイプ (REST API, WebSocket API)

  • REST API: HTTP ベースの API で、Web アプリケーションやモバイルアプリケーションに広く使用される。CRUD 操作をサポート。
  • WebSocket API: 双方向通信をサポートし、リアルタイムアプリケーションに適している。
  • 比較: 試験では、それぞれの API タイプがどのようなユースケースに適しているか問われる。

8.2 カスタムオーソライザー (Lambda Authorizer)

  • 機能: Lambda 関数を利用してカスタム認証・認可ロジックを実装する機能。
  • ユースケース: JWT、OAuth2.0 のようなトークンベース認証や、複雑な認可ルールが必要な場合に使用する。
  • 挙動: API Gateway が Lambda 関数を呼び出し、レスポンスに応じて API へのアクセスを許可または拒否する。

8.3 API の統合(Integration)

  • 統合タイプ: Lambda 関数、HTTP エンドポイント、AWS サービスとの直接統合(VPC Link)など。
  • リクエスト/レスポンスのマッピング: リクエストとレスポンスの形式を変換・マッピングする機能。
  • 特徴: 試験では、様々なバックエンドサービスとの統合方法や設定が問われる。

8.4 API キャッシング(API Caching)

  • 目的: バックエンドサービスへの負荷を減らし、API のパフォーマンスを向上させる。
  • 設定: キャッシュ TTL(有効期限)を設定する。
  • 注意点: 頻繁にデータが変更される API では、適切なキャッシュ設定が必要になる。

8.5 スロットリング(Throttling)

  • 目的: API への過剰なアクセスを制御し、バックエンドサービスの過負荷を防ぐ。
  • 設定: リクエストレートとバーストレートを設定。
  • 重要性: API の可用性と安定性を確保するために重要。

8.6 API キー(API Key)

  • 目的: API へのアクセスを制御し、不正なアクセスを防止する。
  • 利用: API キーを特定のクライアントに発行し、リクエストに含める必要がある。
  • 注意点: API キーは適切に管理する必要がある。

8.7 料金体系

  • 課金対象: API リクエスト数、データ転送量、キャッシュ利用料、WebSocket 接続時間など。
  • 最適化: 不要なリクエストの削減や、適切なキャッシング設定によってコストを最適化可能。

8.8 類似・関連サービスとの比較

  • AWS Lambda: API Gateway と組み合わせて、サーバーレスアプリケーションを構築する。Lambda は API のバックエンドとして利用される。
  • AWS WAF: API Gateway に適用し、Web 攻撃から API を保護する。
  • AWS AppSync: GraphQL API を構築・管理するサービス。API Gateway は REST API または WebSocket API を管理する。

8.9 試験で頻出となる具体的な問われ方と答え

  • Q: API Gateway で REST API と WebSocket API の違いは?
  • A: REST API はリクエスト/レスポンスモデル、WebSocket API は双方向通信モデル。
  • Q: カスタムオーソライザーの目的は?
  • A: Lambda 関数でカスタム認証・認可ロジックを実装すること。
  • Q: API キャッシングのメリットは?
  • A: バックエンド負荷の軽減と API パフォーマンスの向上。
  • Q: スロットリングの設定目的は? A: API への過剰なアクセスを制御し、バックエンドサービスの過負荷を防ぐため。
  • Q: API Gateway の料金は? A: 主に、API リクエスト数、データ転送量、キャッシュ利用料で決まる。