2025.08.29
Laravelで空判定にif文を使うとハマる理由
2023.03.09
インフラCloudFront+Lambda@EdgeでHTTPリダイレクト

– サイトの移設を行う際に、パスの構造が変わる部分についてリダイレクトをする
– 移設後のサイトはCloudFrontでキャッシュしているため、CloudFront側でリダイレクトを行う必要がある
– 当初CloudFrontFunctionsで対応していたが、コード量10KBまでしか扱えないため、およそ100件を超えるようなに対応できない→Lambda@Edgeで実現する
CloudFront Functionsでの方法
https://dev.classmethod.jp/articles/http-redirect-using-cloudfrontfunctions/
Lambda@Edgeでの方法
https://qiita.com/kooohei/items/7fcbc3602f7b7026b5a8
比較
https://qiita.com/hirai-11/items/c9339c88820d01fe0acb
※Lambda@edgeで利用する関数はバージニア北部(us-east-1)である必要があります。東京リージョンで作るとCloudFrontにアタッチする際に以下のようなエラーとなる。
The function must be in region ‘us-east-1’. ARN: arn:aws:lambda:ap-northeast-1:xxxxxxx:function:関数名
[Lambda]-[関数]-[関数の作成]
関数名
なんか適当につけて
ランタイム
Python3.9
コードに以下を張り付けて[Deploy]
def lambda_handler(event, context):
dic = {
'/path/to/old/' : 'https://domain/path_to_new/',
'/path/to/old1/index.html' : 'https://domain/path_to_new2/hogehoge.html',
'/path_to_old/?n=xxxx' : 'https://other_domain/path_to_new3/fugafuga.html'
}
request = event['Records'][0]['cf']['request']
uri = request['uri']
querystring = request['querystring']
if querystring:
uri += '?' + querystring
if uri not in dic:
return request
response = {
'status': '302',
'statusDescription': 'Found',
'headers': {
'location': [{
'key': 'Location',
'value': dic[uri]
}]
}
}
return response
テンプレート:CloudFron-tAccess-request-in-response
"uri": "/path/to/old/",
"querystring": "n=xxxx",
"method": "GET"
この辺書き換えてテストを実施。
問題なければバージョンを発行する
[新しいバージョンを発行]
→生成されたARNを以下の作業で利用するのでコピーしておく
Lambda@Edgeを利用するためにはIAMロールの信頼関係を以下のように修正する必要があります。
[Lambda]-[関数]-[関数名]-[アクセス権限]-[実行ロール]
該当のロール-[信頼関係]を以下のように修正
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"edgelambda.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
[CloudFront]-[ディストリビューション]-対象ID-[ビヘイビア]-[編集]
パスパターン設定の「関数の関連付け」で
ビューワーリクエスト
関数タイプ:Lambda@Edge
関数:上記で取得したARN
として
[変更を保存]
※CloudFrontのデプロイには少し時間がかかるのでお待ちください
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
1
2025.08.29
Laravelで空判定にif文を使うとハマる理由
2

2025.08.29
Git SSH接続でfetch/pullができなくなった時の対処法
3

2025.08.28
【体験談】Amazon Linux 2でMySQLインストール時のOpenSSL・GPG key エラーにハマった話
4
2025.08.28
【AWS】SSMポートフォワーディングとInstance Connectを利用したプライベートEC2へのSSH接続手順
5
2025.07.24
Log::info()が使えない!?Laravel.logのPermission denied エラーを解決する(Docker環境)
タグ検索