You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中为CloudFront函数自动配置日志组保留天数?

问题描述

我有一个CloudFront函数的示例:

resource "aws_cloudfront_function" "cool_function" {

  name    = "cool-function"
  runtime = "cloudfront-js-1.0"
  comment = "The cool function"
  publish = true
  code    = <<EOT
function handler(event) {
    var headers = event.request.headers;
    if (
        typeof headers.coolheader === "undefined" ||
        headers.coolheader.value !== "That_is_cool_bro"
    ) {
        console.log("That is not cool bro!")
    }
    return event.request;
}
EOT
}

创建该函数时,CloudWatch日志组/aws/cloudfront/function/cool-function会自动创建,但该日志组的保留策略为Never Expire,并且在Terraform的aws_cloudfront_function资源参数中未找到设置日志保留天数的选项。

因此我的问题是:是否可以在创建CloudFront函数时自动导入对应的aws_cloudwatch_log_group资源,并修改其retention_in_days参数?


解决方案

可以通过以下步骤实现对自动生成日志组的保留策略管理:

  1. 导入已生成的日志组到Terraform状态
    先执行terraform import命令,将CloudFront自动创建的日志组纳入Terraform管理:

    terraform import aws_cloudwatch_log_group.cool_function_logs /aws/cloudfront/function/cool-function
    
  2. 在配置中声明日志组资源
    在Terraform配置文件中添加aws_cloudwatch_log_group定义,通过引用CloudFront函数的名称动态匹配日志组路径,并设置目标保留天数:

    resource "aws_cloudwatch_log_group" "cool_function_logs" {
      name              = "/aws/cloudfront/function/${aws_cloudfront_function.cool_function.name}"
      retention_in_days = 30 # 可根据需求修改为其他有效值,如7、90、365等
    
      lifecycle {
        # 忽略日志组自动生成的创建时间属性,避免Terraform计划冲突
        ignore_changes = [creation_time]
      }
    }
    
  3. 验证并应用配置
    运行terraform plan确认配置会更新日志组的保留策略,之后执行terraform apply完成修改。

补充说明

  • 若为首次创建CloudFront函数,需先完成函数的创建(执行terraform apply创建aws_cloudfront_function),待日志组自动生成后再执行导入和日志组配置的应用。
  • 如需批量管理多个CloudFront函数的日志组,可使用for_each特性动态生成对应的aws_cloudwatch_log_group资源。

内容的提问来源于stack exchange,提问作者rzlvmp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:15:42