web-dev-qa-db-ja.com

AWS Route53&Lambda:サーバーレスアプリケーションのネイキッドHTTPリクエストをHTTPSWWWにリダイレクトする

問題

「サーバーレス」AWSLambda関数で実行されているサイトがあります。 Route53は、Lambda関数に接続するAPIGatewayにリクエストをルーティングします。

これに伴う問題は、従来のサーバーリダイレクトを設定できないことです。

例として、私はこれに従い question/answerhttp://<my_domain>.comhttps://www.<my_domain>.comにルーティングしました。静的サイトリダイレクトとして設定されているS3バケットにAレコードエイリアスを使用していますhttps://www.<my_domain>.comへ。

質問

Lambdaのようなサーバーレス環境でhttps://<my_domain>.comhttps://www.<my_domain>.comにリダイレクトするにはどうすればよいですか?

4
Emile Petrone

ラムダ関数でリダイレクトを実行する必要があります。

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ラムダでは、リダイレクトについて心配する必要はありません。

それが役に立てば幸い:)

1
MLu

これを行うための設定がcloudfrontにあると思います。それか、lambda @ Edgeを使用してください。つまり、「実際の」ラムダを作成することはありません。

私が個人的に使用しているもう1つのオプションは、Cloudflareをクラウドフロントディストリビューションの前に配置することです。確かに2つのCDNですが、Cloudflareはこれらのリダイレクトを非常に簡単に実行できます。

もう1つのオプションは、2つのクラウドフロントディストリビューションを作成することです。1つはwww用、もう1つはwww以外用ですが、どちらも同じAPIGatewayになります。キャッシュのメリットは限られているため、理想的ではありませんが、機能します。

0
keithRozario