- 公開日
- 最終更新日
【CloudFront】Lambda@edgeでオリジンの転送
この記事を共有する

目次
はじめに
皆さんこんにちは!パーソル&サーバーワークスの小泉です。
CloudFront配下のアプリケーションで特定のクエリパラメータを含むリクエストを別のオリジンに転送したいケースがあったので検証してみました!
本記事では Lambda@edgeの使い方 を解説します!
構成図
※構成図に記載されているALB,EC2,S3の実装手順は割愛します
実装手順
CloudFrontの設定
- CloudFrontからディストリビューションを作成する
- オリジンにALBとS3を設定する
Lambda@Edgeの設定
- us-east-1リージョンからLambdaを作成する
- 以下のソースコードを入力し、トリガーの設定からCloudFrontを選択し、Lambda@edgeをデプロイする
'use strict'; exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; const querystring = request.querystring; if (querystring && querystring.indexOf("wovn=en") !== -1) { request.origin = { custom: { domainName: "xx-yyyy-zzzzz.s3-website-<リージョン名>.amazonaws.com", port: 80, protocol: "http", path: "", sslProtocols: ["TLSv1", "TLSv1.1", "TLSv1.2"], readTimeout: 5, keepaliveTimeout: 5, customHeaders: {} } }; request.headers['host'] = [{ key: 'host', value: "xx-yyyy-zzzzz.s3-website-<リージョン名>.amazonaws.com" }]; } callback(null, request); };
動作確認(Serverを確認する)
クエリパラメータを含まないリクエスト(EC2のindex.htmlを返す)
curl -I https://.cloudfront.net HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 19 Connection: keep-alive Date: Thu, 27 Mar 2025 03:52:59 GMT Set-Cookie: AWSALB=[Mask] Set-Cookie: AWSALBCORS=[Mask] Server: Apache/2.4.62 (Amazon Linux) Last-Modified: Sun, 23 Mar 2025 09:04:03 GMT ETag: "13-630fec4e60907" Accept-Ranges: bytes X-Cache: Miss from cloudfront Via: 1.1 [Mask] X-Amz-Cf-Pop: [Mask] X-Amz-Cf-Id: [Mask]
クエリパラメータを含むリクエスト(S3のindex.htmlを返す)
>curl -I https://.cloudfront.net?wovn=en HTTP/1.1 200 OK Content-Type: text/html Content-Length: 596 Connection: keep-alive Date: Thu, 27 Mar 2025 03:52:38 GMT Last-Modified: Sun, 23 Mar 2025 08:35:14 GMT ETag: "f7c0a30788b0e6631f13c62270b7da7f" Server: AmazonS3 X-Cache: Miss from cloudfront Via: 1.1 [Mask] X-Amz-Cf-Pop: [Mask] X-Amz-Cf-Id: [Mask]
まとめ
無事に特定のパラメータを含むリクエストを別のオリジンに転送することができました!
この記事は私が書きました
小泉 和貴
記事一覧全国を旅行することを目標に、仕事を頑張っています。
