使用Terraform管理AWS CloudWatch时日志保留时长自动回退问题咨询
问题原因及遗漏配置分析
可能的原因
- AWS组织服务控制策略(SCP)强制重置:若你的AWS账户属于AWS组织,可能存在SCP规则强制要求日志保留天数为30天。Terraform执行
apply后,组织的合规性检查会自动将配置修正回30天。 - AWS Config规则自动修正:如果配置了AWS Config的托管/自定义规则,且规则要求日志保留天数为30天并开启了自动修正,Terraform修改为90天后,Config会触发修正流程将值改回30天。
- Terraform未显式定义保留天数:你的Terraform代码中未明确设置
retention_in_days参数,依赖了AWS Provider的默认值(部分旧版本Provider默认90天),但AWS服务自身的默认保留天数是30天。未显式配置的资源,AWS后台可能在特定时间点将其重置为服务默认值,导致Terraform后续plan再次检测到差异。 - 第三方自动化工具冲突:环境中存在其他自动化工具(如Lambda函数、内部脚本、Ansible playbook)定期扫描并修改日志保留天数,将其重置为30天。
遗漏的配置/需要调整的点
- 显式配置
retention_in_days参数:在对应的Terraform资源(如aws_cloudwatch_log_group)中明确添加retention_in_days = 90,替代依赖Provider默认值的做法。这样Terraform会持续维护该配置,避免被AWS默认值或其他流程覆盖。 - 检查并修改AWS组织SCP:登录AWS组织控制台,查看是否存在限制日志保留天数的SCP规则,修改规则允许设置90天,或针对目标资源/账户添加豁免。
- 调整AWS Config规则:进入AWS Config控制台,修改相关规则的预期配置为90天,或关闭规则的自动修正功能,避免和Terraform的配置冲突。
- 排查内部自动化流程:检查是否有Lambda函数、定时脚本等在修改日志保留配置,停止或调整这些流程,消除和Terraform的配置冲突。
内容的提问来源于stack exchange,提问作者Luana Mantovan
相关产品推荐
相关产品推荐

