ALB の後ろに API Gateway を配置する構成を組んでみた
はじめに
やかめです。
API Gateway と ALB の構成といえば「API Gateway から ALB を呼び出す」パターンをよく目にしますが、今回は逆の「ALB の背後に API Gateway を配置する」構成を初めて知ったため、実際に作ってみました。
調べてみると、以下の AWS re:Post 記事があり、Private API Gateway を VPC Endpoint 経由でロードバランサーから呼び出す構成が紹介されていました。
本記事では、上記記事を参考に、
- 外部インターネット → ALB → VPC Endpoint(execute-api)→ API Gateway → Lambda
という構成を作成し、ALB 経由で API Gateway に通信が到達するか確認します。
構成図

やってみた
ALB の背後に Private API Gateway を配置する構成を作成した手順を整理します。
1. セキュリティグループの作成
最初に、ALB 用と VPC Endpoint 用のセキュリティグループを作成します。
ALB 用セキュリティグループ
- インバウンド
- HTTP(80)/HTTPS(443)
- 送信元:0.0.0.0/0
- アウトバウンド:
- HTTPS(443)
- 送信先:VPC Endpoint 用 SG
ALB は外部からの HTTP/HTTPS 通信を受け付け、アウトバウンドは VPC Endpoint に対する HTTPS 通信のみを許可しています。
VPC Endpoint 用セキュリティグループ
- インバウンド
- HTTPS(443)
- 送信元:ALB 用セキュリティグループ
- アウトバウンド:
- デフォルト
VPC Endpoint は ALB からの HTTPS 通信のみを受け付け、アウトバウンドはデフォルト設定のままとしています。
2. VPC Endpoint の作成
次に、API Gateway にアクセスするための Interface VPC Endpoint を作成します。
- サービス名:
com.amazonaws.ap-northeast-1.execute-api - タイプ:Interface
- サブネット:Private Subnet
- セキュリティグループ:VPC Endpoint 用 SG
- ポリシー:フルアクセス
- Private DNS:有効


サービス名には API Gateway 用の execute-api を指定し、ポリシーは検証用途のためフルアクセスとしています。
また、Private DNS を有効にすることで、VPC 内から execute-api のエンドポイントが VPC Endpoint 経由で解決されるようになります。
3. Private API Gateway を作成
API Gateway で Private REST API を作成します。
- API 種別:REST API
- API エンドポイントタイプ:プライベート
- VPC エンドポイント ID:作成したVPC エンドポイントの ID
- セキュリティポリシー:SecurityPolicy_TLS13_1_3_2025_09 (recommended)
- エンドポイントアクセスモード:ベーシック
VPC エンドポイント ID を指定することで、 Private API Gateway と VPC Endpoint が関連付けられます。


Resource Policy を設定
API Gateway 側では、VPC Endpoint 経由のアクセスのみを許可するため、以下のような Resource Policy を設定します。(上部の AWS re:Post を参考にしています)
Resource Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:ACCOUNT_ID:API_ID/*/*/*",
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": "vpce-xxxxxxxx"
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:ACCOUNT_ID:API_ID/*/*/*"
}
]
}
ルートリソース / に GET メソッドを作成
API Gateway 上では、追加のリソースは作成せずデフォルトのルートリソース / のみに GET メソッドを作成します。
- リソースパス:
/ - HTTP メソッド:GET
- 認可:NONE
- API キー:不要
- 統合タイプ:Lambda(または Mock)
4. Lambda を統合
事前に作成しておいた Lambda 関数をルートリソース / の GET メソッドに統合します。
なお、今回の検証では通信経路の確認が目的であるため、Lambda の代わりに Mock 統合を設定しても問題ありません。
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": "Hello from Lambda!"
}
作成した API をステージ test にデプロイします。
- ステージ名:test
5. ターゲットグループの作成
- ターゲットタイプ:IP
- プロトコル:HTTPS
- ポート:443
- ヘルスチェックの詳細設定
- 成功コード:200,403
- ターゲットを登録:
- ネットワーク:使用する VPC
- IPを指定してポートを定義する:VPC Endpoint の ENI(各 AZ の IP)
本構成では、API Gateway への到達可否のみを確認することを目的としているため、ヘルスチェックでは API Gateway に到達した際に返却される 403(認可エラー)も正常とみなす設定としています。
なお、動作確認時には実際に 200 レスポンスが返却されることを確認しています。

6. ALB を作成
- 種別:Application Load Balancer
- スキーム:Internet-facing
- サブネット:Public Subnet(2AZ)
- セキュリティグループ:ALB 用 SG
- リスナー:HTTP (80)
- ターゲットグループ:作成したターゲットグループを選択
7. ALB のルールを設定
ALB から API Gateway に正しくリクエストが届くよう、リスナールールで Host ヘッダーを書き換えます。
- 条件:パス = /*
- トランスフォーム:
- 一致:.*
- 置換:{API_ID}.execute-api.ap-northeast-1.amazonaws.com
- アクション:ターゲットグループへ転送
Host ヘッダーを API Gateway のエンドポイントに書き換えています。
8. 動作確認

ALB の DNS 名に対して /test/ を指定してアクセスしたところ、API Gateway を経由して Lambda のレスポンスが返ることを確認しました。
おわりに
今回は「ALB の背後に API Gateway を配置する構成」を作成してみました。
構成を作成する過程で、ALB 側での Host ヘッダーの書き換え設定に苦戦しました。同様の構成を試される際はご注意ください。
また、今回の検証は挙動確認を目的としたものであり、本番利用については考慮していないことをご理解ください。
本記事が参考になれば幸いです。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました






