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

如何阻止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创建:

  1. 显式配置永久保留并禁用重试
    修改NodejsFunction的初始化代码,添加logRetention和logRetentionRetryOptions参数:
const MyLFN = new NodejsFunction(this, "MyLFN", {
  // 你的原有配置项
  logRetention: logs.RetentionDays.INFINITE,
  logRetentionRetryOptions: {
    maxRetries: 0,
  },
});

通过设置maxRetries: 0,CDK会跳过LogRetention Lambda的创建逻辑。

  1. 手动创建并关联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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:19