こんにちは。
今回は、Amazon API Gatewayについて整理してみます。
Amazon API Gatewayとは
Amazon API Gatewayは、HTTP API・REST API・WebSocket APIを簡単に公開・管理できるフルマネージドサービスです。
クライアントからのリクエストを受け取り、AWS LambdaやAmazon ECS、Amazon EC2などのバックエンドサービスへ転送する役割を担います。
例えば、スマートフォンアプリからユーザー情報を取得する場合は次のような構成になります。
スマホアプリ
│
HTTPS
│
Amazon API Gateway
│
AWS Lambda
│
DynamoDB
API Gatewayは、APIの「受付窓口」のような存在です。
API Gatewayが必要な理由
APIを公開するだけならEC2上にWebサーバーを構築することもできます。
しかし、その場合は
- Webサーバーの管理
- SSL証明書の設定
- 負荷分散
- スケーリング
- セキュリティ対策
などを自分で行う必要があります。
API GatewayならこれらをAWSが管理してくれるため、開発者はAPIの実装に集中できます。
API Gatewayでできること
① APIの公開
HTTPエンドポイントを簡単に公開できます。
https://example.execute-api.ap-northeast-1.amazonaws.com
クライアントはこのURLへアクセスするだけです。
② Lambdaの実行
最も多い利用方法です。
ユーザー
│
API Gateway
│
Lambda
リクエストを受けるとLambdaを実行します。
サーバーレス開発では定番構成です。
③ 認証・認可
API Gatewayでは様々な認証方式を利用できます。
- IAM認証
- Amazon Cognito
- Lambdaオーソライザー
- JWT認証(HTTP API)
APIごとにアクセス制御できます。
④ リクエストの検証
例えば
{
"name": "TARO",
"age": 20
}
のようなJSONだけを受け付けるよう設定でき、不正なデータはLambdaまで到達しないため、アプリケーション側の負荷軽減や入力値チェックの簡略化にも役立ちます。
⑤ スロットリング
APIへのアクセス数を制限できます。
例えば
1000リクエスト/秒
までと設定でき、アクセス集中やDoS攻撃などからバックエンドを保護できます。
⑥ キャッシュ(REST APIのみ)
同じAPIへのアクセスが多い場合は、レスポンスをキャッシュできます。
API Gateway
│
Cache
│
Lambda
キャッシュから応答するため、
- Lambda実行回数の削減
- レスポンスの高速化
が期待できます。
このキャッシュ機能はREST APIで利用できる機能です。HTTP APIではキャッシュ機能は提供されていません。
ステージ(Stage)
API Gatewayでは、1つのAPIに対して複数の**ステージ(Stage)**を作成できます。
例えば、
- dev(開発環境)
- test(テスト環境)
- prod(本番環境)
のように環境ごとにAPIをデプロイできます。
ステージごとに
- エンドポイント
- スロットリング
- ステージ変数
などを個別に設定できるため、環境ごとの管理が容易になります。
API Gatewayが接続できるサービス
API Gatewayは様々なAWSサービスと統合できます。
API Gateway
│
┌──────┼──────────────┐
│ │ │
Lambda ECS/EKS EC2
│
DynamoDB
その他にも
- AWS Step Functions
- Amazon SQS
- Amazon SNS
- Amazon EventBridge
などとも連携できます。
VPC内のサービスと連携する場合
Amazon ECS、Amazon EKS、Amazon EC2などのVPC内のプライベートリソースへ接続する場合は、通常VPC Linkを利用します。
構成例は次のようになります。
クライアント
│
API Gateway
│
VPC Link
│
Network Load Balancer
│
ECS / EC2 / EKS
VPC Linkを利用することで、バックエンドをインターネットへ公開することなく、安全にAPIを提供できます。
REST APIとHTTP APIの違い
| 項目 | REST API | HTTP API |
|---|---|---|
| 機能 | 豊富 | シンプル |
| コスト | 高め | 安い |
| レイテンシ | やや高い | 低い |
| APIキー | ○ | × |
| Usage Plan | ○ | × |
| リクエスト検証 | ○ | × |
| Lambda連携 | ○ | ○ |
| JWT認証 | △(Lambdaオーソライザーで実現) | ○(ネイティブ対応) |
HTTP APIはJWTオーソライザーを標準でサポートしています。一方、REST APIでJWT認証を利用する場合は、一般的にLambdaオーソライザーを利用して実装します。
REST API
企業向けの高機能APIです。
例えば、
- APIキー
- Usage Plan
- リクエスト検証
- キャッシュ
- 詳細な認証・認可
などを利用したい場合に適しています。
HTTP API
HTTP APIはシンプルで高速、かつ低コストです。
Lambdaを呼び出すシンプルなWeb APIであれば、HTTP APIが選ばれるケースも多くあります。
API GatewayとApplication Load Balancerの違い
| 項目 | API Gateway | ALB |
|---|---|---|
| API公開 | ◎ | ○ |
| Lambda統合 | ◎ | ○ |
| APIキー | ○ | × |
| Usage Plan | ○ | × |
| スロットリング | ○ | × |
| キャッシュ | ○(REST APIのみ) | × |
| WebSocket | ○ | × |
| EC2負荷分散 | △ | ◎ |
API管理ならAPI Gateway、EC2やECSへの負荷分散ならALBを選択します。
Application Load BalancerもLambdaをターゲットとして直接呼び出すことができます。
ただし、ALBは負荷分散を目的としたサービスであり、API GatewayのようなAPIキー、Usage Plan、リクエスト変換、認証・認可、スロットリングなどのAPI管理機能は備えていません。
まとめ
Amazon API Gatewayは、APIを安全かつ簡単に公開・管理できるフルマネージドサービスです。
特にAWS Lambdaとの相性が非常によく、サーバーレスアーキテクチャでは中心的な役割を担います。
また、REST APIとHTTP APIでは利用できる機能が異なるため、要件に応じて使い分けることが重要です。