用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