
【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が実行ロールを引き受ける典型的な連携パターン
| 実行ロールを介して連携するサービス | 実行ロールにアタッチするポリシー |
|---|---|
| S3 | s3:ListBucket s3:GetObject s3:PutObject s3:DeleteObject |
| DynamoDB | dynamodb:GetItem dynamodb:PutItem dynamodb:UpdateItem dynamodb:DeleteItem dynamodb:Query dynamodb:Scan |
| SQS(送信) | sqs:SendMessage sqs:SendMessageBatch |
| SNS | sns:Publish |
| EventBridge | events:PutEvents |
| Step Functions | states:StartExecution |
| Kinesis Data Streams | kinesis:PutRecord kinesis:PutRecords |
| Lambda | lambda:InvokeFunction |
信頼ポリシー: API Gateway
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ログ・監視
| ログ出力先 | ログの種類 |
|---|---|
| CloudWatch Logs | アクセスログ/実行ログ |
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| CacheHitCount | キャッシュヒット数 |
| CacheMissCount | キャッシュミス数 |
| ConnectCount | WebSocket接続数 |
| Count | リクエスト総数 |
| IntegrationLatency | 統合レイテンシ |
| Latency | レイテンシ |
| MessageCount | WebSocketメッセージ数 |
| 4XXError | 4xxエラー数 |
| 5XXError | 5xxエラー数 |
| ClientError | クライアントエラー数 |
| ExecutionError | 実行エラー数 |
| IntegrationError | 統合エラー数 |
| DataProcessed | 処理データ量 |
制限値(固定値/ハードリミット/ソフトリミット)
| ハードリミット | 制限値 |
|---|---|
| 統合タイムアウト | 29秒 |
| ペイロードサイズ | 10 MB |
| メソッド数/リソース | 20 |
| ソフトリミット | 制限値 |
|---|---|
| REST APIのスロットル | 10,000 RPS |
| WebSocket接続 | 500,000(同時)、3,000メッセージ/秒 |
| ステージ数/API | 10 |
| リソース数/API | 300 |
| APIキー数/アカウント | 500 |
| 使用量プラン数/アカウント | 300 |
| カスタムドメイン名数 | 120 |
| VPCリンク数/リージョン | 20 |
AWS CLIのサンプルコード
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| APIコール数 | 受信したAPIコール数(百万件単位) |
| データ転送 | API Gatewayからのデータ転送量 |
| キャッシング | API応答のキャッシング(時間課金) |
| WebSocket | WebSocket接続の接続時間とメッセージ数 |