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. アーキテクチャおよび技術要素¶
- クライアントは API Gateway のエンドポイントにリクエストを送信。
- API Gateway はリクエストを認証・認可し、リクエストの変換やマッピングを実施。
- 統合設定に基づき、リクエストをバックエンドサービス(Lambda 関数、HTTP エンドポイントなど)へ転送。
- バックエンドサービスからのレスポンスを API Gateway が受け取り、レスポンスを変換・マッピングし、クライアントへ返却。
- 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. 設定・デプロイ手順(ハンズオン例)¶
- AWS マネジメントコンソールから API Gateway サービスを開き、新しい API を作成。
- リソース(Resource)とメソッド(Method)を定義し、バックエンドサービス(Lambda 関数、HTTP エンドポイントなど)との統合を設定。
- リクエスト/レスポンスのマッピング設定や認証・認可の設定を行う。
- API をデプロイするためのステージを作成。
- 作成した API エンドポイントをテストし、必要に応じて設定を変更。
- 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 リクエスト数、データ転送量、キャッシュ利用料で決まる。