0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

こんにちは。

今回は、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では利用できる機能が異なるため、要件に応じて使い分けることが重要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?