如何阻止AWS CDK添加Lambda订阅过滤器时创建LogRetention函数?
阻止AWS CDK自动创建LogRetention Lambda函数的方法
问题描述
我正在使用AWS CDK结合TypeScript创建Lambda函数,尝试为该函数添加订阅过滤器,将日志推送到Kinesis流。但每次添加该订阅过滤器时,都会自动创建一个我不需要的LogRetention Lambda函数。相关代码如下:
const MyLFN = new NodejsFunction(this, "MyLFN", {...}) // 未设置任何log相关属性 const FnbKinesisSF = new logs.SubscriptionFilter(this, "FnbKinesisSF", { logGroup: MyLFN.logGroup, destination: new destinations.KinesisDestination(FnbKinesis, { role: FnbKinesisRole, }), filterPattern: logs.FilterPattern.allEvents(), });
请问是否有方法阻止该LogRetention Lambda函数的创建?另外说明:该LogRetention函数不会出现在CDK diff中。
解决方案
原因分析
CDK的NodejsFunction默认会为关联的LogGroup启用日志保留期管理逻辑——即使你没有显式设置logRetention属性,它也会创建LogRetention Lambda来维护日志保留配置(默认保留期为永久,但管理逻辑依然会触发)。
具体解决方法
有两种可靠方式可以阻止这个不必要的Lambda创建:
- 显式配置永久保留并禁用重试
修改NodejsFunction的初始化代码,添加logRetention和logRetentionRetryOptions参数:
const MyLFN = new NodejsFunction(this, "MyLFN", { // 你的原有配置项 logRetention: logs.RetentionDays.INFINITE, logRetentionRetryOptions: { maxRetries: 0, }, });
通过设置maxRetries: 0,CDK会跳过LogRetention Lambda的创建逻辑。
- 手动创建并关联LogGroup
直接手动创建LogGroup并绑定到Lambda函数,CDK就不会自动生成管理用的LogRetention Lambda:
const MyLFNLogGroup = new logs.LogGroup(this, "MyLFNLogGroup", { removalPolicy: RemovalPolicy.RETAIN, retention: logs.RetentionDays.INFINITE, }); const MyLFN = new NodejsFunction(this, "MyLFN", { // 你的原有配置项 logGroup: MyLFNLogGroup, });
补充说明
LogRetention函数未出现在CDK diff中,是因为它属于CDK的「辅助资源」,默认不会在常规diff结果中显示。你可以执行cdk diff --all命令查看所有资源,包括这类辅助函数。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

