[AWS] CloudFront+S3オリジンでindex.htmlを省略する – Lambda@Edge + Node.js

  • このエントリーをはてなブックマークに追加
  • LINEで送る

CloudFrontのオリジンにS3を利用する場合、大きく2つのパターンがあります。

  1. S3を独立したWebサーバとして利用する
  2. S3を内部的にHDDのように利用する

前者はS3側で割と色々と設定できるのですが問題は後者です。一般的なWebサーバのように「example.com/hoge/」にアクセスしたら「example.com/hoge/index.html」を返して欲しかったりするわけですが、この機能は自分でコードを書いて用意する必要があるのです。正直面倒くさいw

というわけでCloudFrontを制御するLambda@Edgeを準備していきます。

- Sponsored Link -

基本的な設定の流れ

大きな流れは過去の記事とほぼ同じです。以下を参照ください。IAMの信頼関係などハマりどころも説明しています。

Lambda@Edge

コード

コードは非常にシンプルです。JavaScriptのreplace()メソッドで文字列を置換してるだけですね。

exports.handler = async (event, context, callback) => {
    const request = event.Records[0].cf.request

    const olduri = request.uri
    const newuri = olduri.replace(/\/$/, '\/index.html')
    request.uri = newuri

    return callback(null, request)
}

こちらはDevelopers.IOを参考にさせていただきました。

デプロイ

CloudFrontのイベントは「オリジンリクエスト」を選択します。

参考ページ

コメント

感想やご質問などお気軽にどうぞ。広告が表示されている場合は下にスクロールしてください。投稿にはSNSへのログインが必要です。

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで300円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -