如何在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参数?
解决方案
可以通过以下步骤实现对自动生成日志组的保留策略管理:
导入已生成的日志组到Terraform状态
先执行terraform import命令,将CloudFront自动创建的日志组纳入Terraform管理:terraform import aws_cloudwatch_log_group.cool_function_logs /aws/cloudfront/function/cool-function在配置中声明日志组资源
在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] } }验证并应用配置
运行terraform plan确认配置会更新日志组的保留策略,之后执行terraform apply完成修改。
补充说明
- 若为首次创建CloudFront函数,需先完成函数的创建(执行
terraform apply创建aws_cloudfront_function),待日志组自动生成后再执行导入和日志组配置的应用。 - 如需批量管理多个CloudFront函数的日志组,可使用
for_each特性动态生成对应的aws_cloudwatch_log_group资源。
内容的提问来源于stack exchange,提问作者rzlvmp
相关产品推荐
相关产品推荐

