【问题标题】:How to add a tag to an AWS-CDK construct如何将标签添加到 AWS-CDK 构造
【发布时间】:2019-03-04 19:39:55
【问题描述】:

如何将标签添加到 AWS-CDK 特定构造,或者甚至更好地为堆栈中创建的所有资源添加一个标签定义?

【问题讨论】:

    标签: aws-cdk


    【解决方案1】:

    以上答案使用了不推荐使用的语法。

    新版本标记整个App:

    const app = new cdk.App();
    new SomeStack(app, 'SomeStack');
    Tags.of(app).add("app", "my-app-name-here");
    

    您也可以只标记单个堆栈:

    const app = new cdk.App();
    const stack = new SomeStack(app, 'SomeStack');
    Tags.of(stack).add("stack-name", "SomeStack");
    

    或个别构造:

    const usersTable = new dynamodb.Table(this, 'Users');
    Tags.of(usersTable).add("owner", "team-andromeda");
    

    标签将分层应用于子构造。

    【讨论】:

    • 感谢您的详细解释!这行得通。
    【解决方案2】:

    根据 aws-cdk 文档,您可以将标签添加到所有构造/资源。标签将继承到同一“树”内的构造。这很酷。

    基于 java 的 aws-cdk 使用示例:

    MyStack stack = new MyStack(app, "nameOfStack");
    Tag.add(stack, "tag_foo", "tag_foo");
    

    AWS-Doc CDK Tagging

    AWS CDK Reference: Tag

    标签可以应用于任何结构。标签是继承的,基于 范围。如果您标记构造 A,并且 A 包含构造 B,则构造 B 继承标签。

    来自 aws-cdk 文档的示例:

    import { App, Stack, Tag } from require('@aws-cdk/core');
    
    const app = new App();
    const theBestStack = new Stack(app, 'MarketingSystem');
    
    // Add a tag to all constructs in the stack
    Tag.add(theBestStack, 'StackType', 'TheBest');
    

    【讨论】:

      【解决方案3】:

      您可以在Python 中为您的 CDK 应用添加标签,如下所示:

      from aws_cdk import core
      
      app = core.App()
      core.Tags.of(app).add("TEAM", "TeamA") # add tags to the entire app (all resources created by this app)
      
      lambda_stack = LambdaStack(app, 'lambda-stack')
      
      core.Tags.of(lambda_stack).add("TEAM", "TeamA") # add tags to the entire stack (all resources of this stack)
      

      ...或构造:

      lambda_role = iam.Role(self,
          assumed_by=iam.ServicePrincipal(service='lambda.amazonaws.com'),
          role_name='lambda-role'
      )
      core.Tags.of(lambda_role).add("TEAM", "TeamA") # add tags to this construct (add tags to just this role)
      

      【讨论】:

        【解决方案4】:

        因为您可能希望将多个标签添加到构造中, 传递标签对象很方便。您可以使用 cdk 中的方面来下降节点以查找您的类型的节点并将您想要应用的任何内容应用于所述节点。 以下示例添加标签。

        export class TagAspect implements cdk.IAspect {
         private readonly tags: Object;
        
         constructor(tags: Object) {
           this.tags = tags;
         }
        
        public visit(node: cdk.IConstruct): void {
          if (node instanceof cdk.Stack) {
              Object.entries(this.tags).forEach( ([key, value]) => {
              cdk.Tag.add(node,key,value); 
          });
         }}}
        

        然后在你想应用一个方面运行的堆栈中 this.node.applyAspect(new TagAspect({"tag1":"mytag1","tag2":"another tag","tag3":"andanother"}));

        【讨论】:

          【解决方案5】:

          使用Java SDK:

          public class CdkInitClusterApp {
              public static void main(final String[] args) {
                  final App app = new App();
                  final CdkInitClusterStack cdkInitClusterStack = new CdkInitClusterStack(app, "CdkInitClusterStack");
                  Tag.add(cdkInitClusterStack, "Project", "Value");
                  app.synth();
              }
          }
          

          然后重新创建 jar

          mvn clean compile package
          

          然后运行cdk diff 来验证更改,输出将类似于以下内容:

          (base) [alessiosavi@localhost cdk-init-cluster]$ cdk diff
                             CdkInitClusterStack
          Resources
          [~] AWS::DynamoDB::Table cdk-test-table cdktesttableB0274F47 
           └─ [+] Tags
               └─ [{"Key":"Project","Value":"Value"}]
          

          【讨论】:

            猜你喜欢
            • 2020-03-07
            • 2023-01-24
            • 2019-11-10
            • 2020-09-07
            • 2023-02-23
            • 2020-05-20
            • 2020-06-22
            • 2021-08-25
            • 2021-03-12
            相关资源
            最近更新 更多