用Terraform来管理CloudFront函数

経緯 – 经过或历史背景

 

根据上述文章,当以「/」或「.」结尾的URI进行重新加载时,会发生下载空文件夹的错误。为了解决这个问题,创建了一个添加虚拟文件名「index.html」的函数。

过去,我们直接在CloudFront函数中进行编写,但现在我们决定使用Terraform进行管理。

让我们用Terraform来管理CloudFront函数。

本文介绍了如何使用Terraform来管理CloudFront函数。具体而言,解释了如何使用Terraform配置函数以控制下载,当URL以/或.结尾时,会自动添加index.html。

设定CloudFront函数。

首先,我们要确认当前在CloudFront中使用的函数。以下是一个名为hogehoge.js的函数示例。

function handler(event) {
    var request = event.request;
    var uri = request.uri;

    if (uri.endsWith('/')) {
        request.uri += 'index.html';
    } else if (!uri.includes('.')) {
        request.uri += '/index.html';
    }

    return request;
}

如果URL以/结尾或者没有文件扩展名,这个函数会在请求的URI后面添加index.html。

在Terraform中的配置设置。

以下是一个代码示例,展示了如何使用Terraform管理上述函数。

resource "aws_cloudfront_function" "example" {
  name    = "example"
  runtime = "cloudfront-js-1.0"
  comment = "example function"
  publish = true
  code    = file("hogehoge.js")
}

resource "aws_cloudfront_distribution" "example" {
  # ... 他の設定 ...

  # function_association is also supported by default_cache_behavior
  default_cache_behavior {
  # ... 他の設定 ...

    function_association {
      # specific event_type viewer-request or viewer-response
      event_type   = "viewer-request"
      function_arn = aws_cloudfront_function.example.arn
    }
  }
}

這段程式碼是在Terraform中定義CloudFront函數的示例。該函數是使用 aws_cloudfront_function 資源來定義的,並且函數的程式碼是從 hogehoge.js 檔案中讀取的。

文献引用

    • CloudFront FunctionsをTerraformで書いてみた – Qiita

 

    • TerraformでCloudFront Functionsを環境ごとに有効化/無効化してみた | DevelopersIO

 

    TerraformとCloudFrontでBasic認証をかける – Zenn
广告
将在 10 秒后关闭
bannerAds