『DBを使うならLambda@Edge?』『署名付きCookieで動画は守れる?』を、CloudFrontの入口からNext.js・APIまで一続きの流れで整理する。ポイントは処理の複雑さではなく、判断材料がどこにあるか。
同じ『振り分け』でも、固定ルール・軽量判断・外部照会・ページ生成は別の仕事。
| 層 | 判断材料 | 代表的な仕事 |
|---|---|---|
| CloudFrontビヘイビア | URLパスなどの固定設定 | /static/*はS3、それ以外はAmplify |
| CloudFront Functions | URL・ヘッダー・Cookie・JWT | リダイレクト、URL書換え、軽いトークン検証 |
| Lambda@Edge | 上記+外部API・AWS SDK・リクエストボディ | エッジで動的認可、接続先変更、複雑な加工 |
| Next.js・バックエンド | DB・業務データ・セッション | 管理画面、受講ページ、一覧取得、通常の認可 |
DBでページを出し分けるだけならLambda@Edgeではない。通常はNext.jsやAPIがDBを読み、ページを生成する。
コードが長いか短いかより、外へ問い合わせる必要があるかで決める。
Cookieなし → /loginへ = Functions JWT plan=premium → /premiumへ = Functions 現在も契約中? → 認可APIへ確認 = Lambda@Edge 案件に所属中? → DBをAPI経由で確認 = Lambda@Edge
『DBを使うシステムだからLambda@Edge』ではない。『CloudFrontの入口でDB由来の最新状態を使わなければならない』場合に限る。
1本だけ、講座一式、現在の購入状態を都度確認——要件ごとに門番を変える。
| 要件 | 最小の選択 | 理由 |
|---|---|---|
| 1本のダウンロードを10分だけ許可 | 署名付きURL | 対象ファイルが1つ |
| 会員に/videos/course-a/*を許可 | 署名付きCookie | HLSセグメントなど複数ファイルを同じURLのまま保護 |
| 購入・返金・停止を毎回最新状態で確認 | Lambda@Edge+認可API | CloudFrontだけではDBの現在値が分からない |
| 管理画面で購入済み講座一覧を表示 | Next.js・API | これは通常の動的ページ生成 |
署名付きCookieは認可処理を軽くできるが、動画のCloudFront転送料そのものを無料にはしない。
S3から直接・高速に配信しながら、アプリと同じ細かな権限判定を入口へ持ち込む。
GET /private/company-a/project-x/estimate.pdf
Cookie: session=...
Lambda@Edge → POST /authorize
{
"path": "/private/company-a/project-x/estimate.pdf",
"session": "..."
}
200 → S3へ進む
403 → その場で拒否
アクセス制御では、Viewer RequestとOrigin Requestの違いが安全性に直結する。
| イベント | 実行タイミング | 向く処理 |
|---|---|---|
| Viewer Request | キャッシュ確認前・対象リクエストごと | 毎回必要な認証、URL・キャッシュキー変更 |
| Origin Request | キャッシュミスでオリジンへ送るときだけ | 接続先変更、オリジン負荷を抑えたい加工 |
教材の実例はOrigin RequestにLambda@Edgeを置く。非公開コンテンツの認可として使うなら、キャッシュ無効化など『すべての必要な要求が必ず認可を通る』条件の確認が必要。
概念は有効だが、制限値はAWS公式の最新版を参照する。
| 項目 | CloudFront Functions | Lambda@Edge |
|---|---|---|
| ネットワークアクセス | 不可 | 可能 |
| 実行時間 | サブミリ秒 | 最大30秒 |
| メモリ | 2MB | Viewer系128MB/Origin系最大10GB |
| コード+ライブラリ | 最大10KB | 最大50MB |
| 通常の環境変数 | 利用不可 | 利用不可 |
| イベント | Viewer Request/Response | Viewer+OriginのRequest/Response |
2026-08-15取得。教材の『Lambda@Edgeは環境変数を利用可能』『コード最大1MB』は現在のAWS公式仕様と一致しない。