更新CloudFormation栈修改Lambda关联CloudWatch日志组不生效如何解决?
核心原因
Lambda 服务默认的日志输出路径是固定规则的,仅会写入名称符合 /aws/lambda/<你的Lambda函数实际名称> 格式的CloudWatch日志组。你在CloudFormation模板中自行定义的不符合该命名规则的日志组,无论是否调整DependsOn配置,都不会被Lambda识别为默认日志输出目标,DependsOn仅用于控制资源创建顺序,不修改Lambda的日志路由逻辑。
解决方案
根据你的业务需求,可二选一执行:
- 方案1:坚持使用自定义名称的日志组
- 在Lambda的执行角色IAM策略中,新增写入目标自定义日志组的权限,示例如下:
{ "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<AWS区域>:<你的账号ID>:log-group:<自定义日志组名称>:*" }- 修改Lambda业务代码,手动初始化CloudWatch Logs SDK客户端,将运行时日志主动推送到指定的自定义日志组,覆盖默认的日志输出逻辑。
- 方案2:接受默认日志组命名规则,仅需更换日志组
- 先手动从AWS控制台删除原有的旧默认日志组,避免Lambda复用旧资源
- 在CloudFormation模板中调整日志组定义,确保新日志组的名称完全符合
/aws/lambda/<Lambda函数实际名称>格式,同步关联对应权限 - 更新CloudFormation栈,完成后触发一次Lambda测试调用,即可验证日志已写入新日志组
注意事项
- 如果你的Lambda函数是通过CloudFormation定义的,函数名如果配置了自动生成的随机后缀,需要先获取到最终生成的实际函数名,再匹配日志组命名规则
- 不要在模板中同时保留同名的新旧日志组定义,会导致栈更新报错
内容的提问来源于stack exchange,提问作者user3966432
相关产品推荐
相关产品推荐

