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

能否仅为AWS CDK自定义构造创建的资源添加标签?

解决CDK中仅为自定义资源打标签的问题

当你在Stack级别添加标签时,CDK自动生成的附属资源(比如启用logRetention时出现的日志管理Lambda)也会被打上相同标签。要只给自己定义的资源打标签,有几种实用方法:

方法1:直接给自定义资源单独打标签

别在Stack全局加标签,而是给你自己写的Lambda单独加标签,这样最直接:

export class MainStack extends Stack {
  constructor(scope: Construct, id:string, props:StackProps) {
    super(scope, id, props);

    const func = new Function(this, 'function', {
        functionName: 'cdk-function',
        code: Code.fromInline('print(event)'),
        handler: 'lambda.handler',
        runtime: Runtime.PYTHON_3_8,
        logRetention: RetentionDays.ONE_DAY
    });

    // 只给这个自定义Lambda打标签
    Tags.of(func).add('createdBy','cdk');
  }
}

这样只有你显式定义的cdk-function会被打上标签,CDK自动生成的日志管理Lambda不会沾到标签。

方法2:全局加标签但排除自动资源

如果必须在Stack全局加标签,又要排除自动生成的资源,可以用两种方式过滤:

方式A:按资源类型过滤(适合批量排除)

如果Stack里只有你自定义的一个Lambda,也可以先全局加标签,再排除所有Lambda类型,然后单独给自定义的Lambda补加标签:

export class MainStack extends Stack {
  constructor(scope: Construct, id:string, props:StackProps) {
    super(scope, id, props);

    // 全局加标签,但排除所有Lambda资源
    Tags.of(this).add('createdBy','cdk', {
      excludeResourceTypes: ['AWS::Lambda::Function']
    });

    const func = new Function(this, 'function', {
        functionName: 'cdk-function',
        code: Code.fromInline('print(event)'),
        handler: 'lambda.handler',
        runtime: Runtime.PYTHON_3_8,
        logRetention: RetentionDays.ONE_DAY
    });

    // 单独给自定义Lambda补加标签
    Tags.of(func).add('createdBy','cdk');
  }
}

方式B:按构造ID过滤(精准排除)

CDK自动生成的日志留存Lambda,构造ID通常带LogRetention后缀,你可以遍历Stack内的资源,只给自己定义的资源打标签:

export class MainStack extends Stack {
  constructor(scope: Construct, id:string, props:StackProps) {
    super(scope, id, props);

    const func = new Function(this, 'function', {
        functionName: 'cdk-function',
        code: Code.fromInline('print(event)'),
        handler: 'lambda.handler',
        runtime: Runtime.PYTHON_3_8,
        logRetention: RetentionDays.ONE_DAY
    });

    // 遍历Stack下的所有资源,只给ID匹配的自定义资源打标签
    this.node.children.forEach(child => {
      if (child.id === 'function') {
        Tags.of(child).add('createdBy','cdk');
      }
    });
  }
}

推荐方案

优先选方法1,逻辑简单清晰,不会因为CDK版本更新导致自动资源的ID或类型变化而失效,维护起来最省心。

内容的提问来源于stack exchange,提问作者Levi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:45:20