- 公開日
- 最終更新日
【CloudFront】CloudFront Functionsでリクエストをリダイレクト
この記事を共有する

目次
はじめに
皆さんこんにちは!パーソル&サーバーワークスの小泉です。
前回のブログでは、Lambda@edgeを使用し、Amazon CloudFront (以下、CloudFront) 配下のアプリケーションで特定のクエリパラメータに応じてオリジンに転送する方法を紹介しました。
【CloudFront】Lambda@edgeでオリジンの転送
今回はそのケースとは少し異なり、特定のクエリパラメータを含むリクエストを、別のURLへリダイレクトさせる方法を検証してみました!
本記事では CloudFront Functionsの使い方 を解説します!
構成図
※構成図に記載されているALB,EC2,S3の実装手順は割愛します
実装手順
CloudFrontの設定
- CloudFrontからディストリビューションを作成する
- オリジンにALBを設定する
- CloudFrontの画面上の関数から関数を作成をクリックする
- 以下のコードを貼り付ける
- 関数の発行を行う
- 作成したディストリビューションと関連付けを行う(イベントタイプはViewer Requestを選択)
function handler(event) { var request = event.request; var querystring = request.querystring; // クエリパラメータに yyyy=zz があるかチェック if (querystring && querystring["yyyy"] && querystring["yyyy"].value === "zz") { return { statusCode: 302, statusDescription: "Found", headers: { "location": { "value": "http://aa-bbb-bucket.s3-website-<リージョン名>.amazonaws.com" } } }; } // それ以外は ALB へ転送 return request; }
動作確認
クエリパラメータ含まないリクエスト(EC2のindex.htmlを返す)
C:\Users\xxx.xxxx>curl http://xxx.cloudfront.net
これはEC2です
C:\Users\xxx.xxxx>
クエリパラメータ含むリクエスト(S3のindex.htmlを返す)
C:\Users\xxx.xxxx>curl -L http://xxx.cloudfront.net?yyyy=zz
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Redirected Page</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
padding: 50px;
background-color: #f4f4f4;
}
h1 {
color: #333;
}
p {
font-size: 18px;
color: #666;
}
</style>
</head>
<body>
<h1>これはS3のファイルです</h1>
</body>
</html>
C:\Users\xxx.xxxx>
まとめ
無事に特定のパラメータを含むリクエストを別のURL(S3)にリダイレクトすることができました! 前回のブログと結果自体は同じでも、要件や仕様に応じてCloudFront FunctionsとLambda@Edgeのどちらを使うべきかを適切に判断し、それを踏まえて設計できるエンジニアを目指していきます。
この記事は私が書きました
小泉 和貴
記事一覧全国を旅行することを目標に、仕事を頑張っています。
