👉 1. はじめに

URL リダイレクトは、ウェブアプリケーションにおいて頻繁に行われる処理の1つです。リソースの移動や、古い URL からの切り替えなど、様々な理由でリダイレクトが必要になります。

今回は、Lambda@Edge と CloudFront を使ってリダイレクトを実現する方法について解説します。正規表現を使ったパターンマッチングなど、柔軟な実装方法も紹介しますので、ぜひ参考にしてみてください。

👉 2 AWS Lambda@Edge での URL リダイレクト

Lambda@Edge を使えば、CloudFront 上でリダイレクト処理を行うことができます。以下のようなコードを Lambda@Edge 関数として実装します。

import re

# リダイレクト先の URL パターン
redirect_patterns = [
    (r'^/css/base\.css$', 'https://hogehoge.com/fugal/css/base.css'),
    (r'^/css/categories/categories\.css$', 'https://hogehoge.com/fugal/css/categories/categories.css'),
    (r'^/css/products/products\.css$', 'https://hogehoge.com/fugal/css/products/products.css'),
]

def lambda_handler(event, context):
    request = event['Records'][0]['cf']['request']
    request_path = request['uri']

    # パターンにマッチするかチェック
    for pattern, redirect_url in redirect_patterns:
        if re.match(pattern, request_path):
            break
    else:
        # マッチしない場合は元のリクエストを返す
        return request

    # リダイレクトレスポンス
    response = {
        'status': '301',
        'statusDescription': 'MovedPermanently',
        'headers': {
            'location': [{
                'key': 'Location',
                'value': redirect_url
            }]
        }
    }

    return response

この Lambda@Edge 関数では、CloudFront からのリクエストオブジェクトを処理しています。redirect_patterns に定義されたパターンとマッチングし、マッチした場合はステータスコード 301 とリダイレクト先の URL を含むレスポンスオブジェクトを返します。

この Lambda@Edge 関数を CloudFront に関連付けることで、CloudFront 上でURLリダイレクトが行われるようになります。

👉 3. まとめ

Python では URL リダイレクトを簡単に実装できます。Lambda@Edge を使えば、クラウド上でリダイレクトサービスを提供できます。

正規表現を使ったパターンマッチングにより、柔軟なリダイレクト処理が可能になります。また、AWS Lambda@Edge と CloudFront を組み合わせることで、グローバルなコンテンツ配信ネットワーク上でリダイレクトを実現できます。

URL リダイレクトは、ウェブアプリケーションの開発やメンテナンスにおいて重要な機能です。今回紹介した実装方法を参考にして、自分のユースケースに合わせたリダイレクト処理を構築してみてください。

最後までお読みいただきありがとうございました。他に質問があれば気軽に聞いてくださいね。

👉 4. 参考文献や参考サイト