「サーバーレス」AWSLambda関数で実行されているサイトがあります。 Route53は、Lambda関数に接続するAPIGatewayにリクエストをルーティングします。
これに伴う問題は、従来のサーバーリダイレクトを設定できないことです。
例として、私はこれに従い question/answerhttp://<my_domain>.com
をhttps://www.<my_domain>.com
にルーティングしました。静的サイトリダイレクトとして設定されているS3バケットにAレコードエイリアスを使用していますhttps://www.<my_domain>.com
へ。
Lambdaのようなサーバーレス環境でhttps://<my_domain>.com
をhttps://www.<my_domain>.com
にリダイレクトするにはどうすればよいですか?
ラムダ関数でリダイレクトを実行する必要があります。
URLで使用されている実際のホスト名は、おそらくevent.headers.Host
としてLambdaに渡されると思います。したがって、Lambdaでは、次のPythonのようなコードを実行する必要があります。
def lambda_handler(event, context):
if not event['headers']['Host'].startswith('www'):
return PermanentRedirect('www.'+event['headers']['Host']+event['path'])
ただし、私があなたなら、www以外のホスト名を、wwwへのリダイレクトの実行専用の単一のLambdaを持つ別のAPIゲートウェイにポイントします。その後、実際のworkerラムダでは、リダイレクトについて心配する必要はありません。
それが役に立てば幸い:)
これを行うための設定がcloudfrontにあると思います。それか、lambda @ Edgeを使用してください。つまり、「実際の」ラムダを作成することはありません。
私が個人的に使用しているもう1つのオプションは、Cloudflareをクラウドフロントディストリビューションの前に配置することです。確かに2つのCDNですが、Cloudflareはこれらのリダイレクトを非常に簡単に実行できます。
もう1つのオプションは、2つのクラウドフロントディストリビューションを作成することです。1つはwww用、もう1つはwww以外用ですが、どちらも同じAPIGatewayになります。キャッシュのメリットは限られているため、理想的ではありませんが、機能します。