CloudFront+S3構成の静的サイトでサブディレクトリのIndexをCloudFront Functionsを使って参照してする方法
以前、Lambda@Edgeを使って、静的サイトのサブディレクトリのアクセスをindex.htmlを参照する設定を書きましたが、 CloudFront Functionsを使えばLambda@Edgeがなくても実現できることを知りましたので共有します。 Lambda@EdgeよりもCloufFront Functionsのほうが良かったところは、なんと言っても関数の反映がめちゃくちゃ早いです!
やりたいこと
- CloudFrontのサブディレクトリにアクセスが来たらindex.htmlを参照する
- URLに /index.html があれば、/index.html を取ったURLにリダイレクトさせる
- URLの末尾に「/」があれば取る(remove trailing slash)
CloudFront 関数を作成
CloudFrontにアクセスして、左のメニューから 関数
を選んで、右上にある 関数を作成
ボタンをクリックします。
関数の名前を記入して 関数を作成
ボタンをクリックします。
関数を書き換えます
関数コード > 開発 からJavaScriptコードを下記のコードに書き換えます。
このサンプルを参考にしてますが、やりたいことの 1「CloudFrontのサブディレクトリにアクセスが来たらindex.htmlを参照する」 は実現できますが、 2「URLに /index.html があれば、/index.html を取ったURLにリダイレクトさせる」, 3「URLの末尾に「/」があれば取る(remove trailing slash)」 はできないので少しアレンジを加えてます。
1 |
|
関数を発行
先に 関数を発行
ボタンをクリックしてからCFディストリビューションを関連付けします。
ポップアップが出ますので、ディストリビューションに関連付けしたいディストリビューションIDを入力、
イベントタイプ を Viewer Request
を選択、キャッシュビヘイビアを Default(*)
を選択します。
関連付けされたディストリビューションIDが追加されました。
CloudFront Functionsのトップページに戻って、追加した関数のステータスが デプロイ済み
になれば反映されます。
以上で設定は終わりです。Lambda@Edgeと比べてシンプルに設定でき、テストのUIもわかりやすく、かつ関数の反映がとても早いです。 Lambda@Edgeを使わないとできなかったことが、CloudFront内だけで完結するのはめっちゃ嬉しいですね!