API Gateway

【VPC外リージョンサービス】

API Gateway は、フルマネージド型の API フロントサービスです。REST、HTTP、WebSocket の各プロトコルに対応しており、APIを通じてアプリケーションとバックエンド間の通信を安全かつ効率的に管理できます。

API Gateway では、APIリクエストのルーティング認証(Cognito、JWT、Lambda オーソライザーなど)を柔軟に設定できるほか、スロットリング(スループット制御)機能によって、過剰なリクエストからシステムを保護します。また、WAF(Web Application Firewall)との連携により、不正アクセスや攻撃から API を守ることができます。

デプロイ面では、API のバージョンや環境ごとに Stage(ステージ) を管理し、Deploy(デプロイ) を行うことで、開発・検証・本番環境を明確に分離できます。さらに、Canary(カナリア)リリース機能を利用することで、リクエストの一部を新しい API バージョンに段階的に切り替え、安全にリリースを進めることができます。

バックエンドとしては、Lambda、ECS/EKS、ALB(Application Load Balancer)、および VPC (Virtual Private Cloud)内の HTTP エンドポイント などを指定でき、幅広いアーキテクチャに対応します。また、カスタムドメインと ACM(AWS Certificate Manager) を統合することで、HTTPS化された安全な API エンドポイントを提供できます。

API のメトリクスやアクセスログは Amazon CloudWatch に送信され、モニタリングや可視化が容易です。

重要用語

関連サービス

ユースケース

Web・モバイルアプリ向けREST APIの公開フロントエンドからのHTTPリクエストを受け付ける入り口としてAPI Gatewayを配置し、バックエンドのLambdaやEC2に処理を渡すことで、認証やレート制限付きのAPIを提供する。
マイクロサービスAPIの集約(BFF)複数のバックエンドサービスを1つのAPIエンドポイントに集約し、クライアントごと(Web/モバイル)に最適化されたAPIレスポンスを返すBFF(Backend For Frontend)として利用する。
外部パートナー向けAPI提供パートナー企業に公開する業務APIに対して、APIキーや利用制限、認証をAPI Gateway側で管理し、安全に外部公開する。

ベストプラクティス

ステージとデプロイ管理開発・ステージング・本番などステージを分けてデプロイを管理する。
WAFや認証の統合CognitoやLambdaオーソライザー、WAFと連携してAPIを保護する。
スロットリングとクォータ設定乱用やスパイクアクセスからバックエンドを守るためにレート制限を設定する。

高可用性・バックアップ・リトライ

高可用性・バックアップ・リトライ設計のポイント
【デフォルト】AWS内部で冗長化
 ・リクエスト処理エンジン
 ・API定義・設定データ
 ・認証・認可メカニズム
 ・レスポンスキャッシュ(有効時)
 ・スロットリング・クォータ管理
 ・ログ・メトリクス収集
【自動リトライ】デフォルト(バックオフ後、1~3回)
 APIを実行した際に、AWS内部で通信エラー、一時的な障害を検知すると、自動的にリトライを行う

セキュリティ

関連サービス設定内容
WAF(アプリケーション層の脅威に対する防御)【CloudFrontを使用しない場合】
 WAFをアタッチすることを推奨
Shield(DDoS攻撃からのリソース保護)Shield Standardは常時有効
【CloudFrontを使用しない場合】
 Shield Advancedの有効化を推奨
ACM(SSL/TLS証明書の自動管理)HTTPS利用時はACM証明書が必須
リージョン:VPCのあるリージョン
KMS(データの暗号化と鍵の安全管理)-
Secrets Manager(機密情報の安全管理)シークレット(秘密情報)の作成が推奨
 バックエンド連携に使うAPIキーや認証トークン
SSM Parameter Store(設定情報の一元管理)-
CloudTrail(操作履歴の記録・監査・追跡)【自動記録】
作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI)
データ操作は追跡できない(データプレーンAPI)
Config(リソースの構成状態・設定変更を記録)【Configが有効な場合】
ステージ/ログ/認証/エンドポイント種別の変更履歴・準拠評価
GuardDuty(脅威を自動検出)【GuardDutyが有効な場合】
エンドポイント設定変更のAPI異常検知
API Gatewayが実行ロールを引き受ける典型的な連携パターン
実行ロールを介して連携するサービス実行ロールにアタッチするポリシー
S3s3:ListBucket
s3:GetObject
s3:PutObject
s3:DeleteObject
DynamoDBdynamodb:GetItem
dynamodb:PutItem
dynamodb:UpdateItem
dynamodb:DeleteItem
dynamodb:Query
dynamodb:Scan
SQS(送信)sqs:SendMessage
sqs:SendMessageBatch
SNSsns:Publish
EventBridgeevents:PutEvents
Step Functionsstates:StartExecution
Kinesis Data Streamskinesis:PutRecord
kinesis:PutRecords
Lambdalambda:InvokeFunction
※)権限設計の原則

信頼ポリシー: API Gateway

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ログ・監視

ログ出力先ログの種類
CloudWatch Logsアクセスログ/実行ログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
CacheHitCountキャッシュヒット数
CacheMissCountキャッシュミス数
ConnectCountWebSocket接続数
Countリクエスト総数
IntegrationLatency統合レイテンシ
Latencyレイテンシ
MessageCountWebSocketメッセージ数
4XXError4xxエラー数
5XXError5xxエラー数
ClientErrorクライアントエラー数
ExecutionError実行エラー数
IntegrationError統合エラー数
DataProcessed処理データ量

制限値(固定値/ハードリミット/ソフトリミット)

ハードリミット制限値
統合タイムアウト29秒
ペイロードサイズ10 MB
メソッド数/リソース20

ソフトリミット制限値
REST APIのスロットル10,000 RPS
WebSocket接続500,000(同時)、3,000メッセージ/秒
ステージ数/API10
リソース数/API300
APIキー数/アカウント500
使用量プラン数/アカウント300
カスタムドメイン名数120
VPCリンク数/リージョン20

AWS CLIのサンプルコード

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
APIコール数受信したAPIコール数(百万件単位)
データ転送API Gatewayからのデータ転送量
キャッシングAPI応答のキャッシング(時間課金)
WebSocketWebSocket接続の接続時間とメッセージ数
料金計算ツール

公式ページ

AWSドキュメント API Gateway