背景
CloudFrontとS3でHugoのサイトをホスティングしたいです。
サブディレクトリにindex.htmlはあるのですが、Hugoで生成されるhrefにはindex.htmlが書かず、ディレクトリまで書かれた状態です。
なので、いざリンクをクリックすると、404 NOT FOUNDの扱いになってしまいます。デフォルトルートはindex.htmlを返すので、サブディレクトリも返してくれればいいのにと思います。
apacheやnginxだと、何もしないでもでindex.htmlを返却するような定義が書かれてます。一方、CloudFrontはCloudFront Functionsを実装しないと実現できません。
対応
CloudFront Functionsを実装して、サブディレクトリでもindex.htmlを返すようにします。
コードは以下のページのをそのまま使用します。AWSが提供しているコードなので、心配ないはず!
terraformのdefault_cache_behavior
の中にfunction_association
を追記します。
resource "aws_cloudfront_distribution" "doc_cfront" {
~~省略~~
default_cache_behavior {
~~省略~~
function_association {
event_type = "viewer-request"
function_arn = aws_cloudfront_function.main.arn
}
}
}
そしたら、aws_cloudfront_function
を追記します。
resource "aws_cloudfront_function" "main" {
name = "function"
runtime = "cloudfront-js-1.0"
comment = "default directory index"
publish = true
code = file("./CloudFront_Functions/function.js")
}