How to add a tag to an AWS-CDK construct

后端 未结 4 1334
孤街浪徒
孤街浪徒 2021-01-19 21:22

How to add a tag to an AWS-CDK specific construct or even better one tag definition to all ressources created within the stack?

相关标签:
4条回答
  • 2021-01-19 21:55

    Because you'll likely want to add more than one Tag to a construct, its handy to pass an object of tags. You can use aspects in cdk to descend nodes looking for node of your type and applying whatever you want to apply to said node. The following example adds tags.

    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); 
      });
     }}}
    

    Then in the Stack you want to apply an aspect to run this.node.applyAspect(new TagAspect({"tag1":"mytag1","tag2":"another tag","tag3":"andanother"}));

    0 讨论(0)
  • 2021-01-19 21:55

    Using the 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();
        }
    }
    

    Then recreate the jar

    mvn clean compile package
    

    And run the cdk diff for verify the changes, the output will be similar to the following one:

    (base) [alessiosavi@localhost cdk-init-cluster]$ cdk diff
                       CdkInitClusterStack
    Resources
    [~] AWS::DynamoDB::Table cdk-test-table cdktesttableB0274F47 
     └─ [+] Tags
         └─ [{"Key":"Project","Value":"Value"}]
    
    0 讨论(0)
  • 2021-01-19 22:07

    According to aws-cdk doc you can add a tag to all constructs/ressources. Tags will inherits to constructs within same "tree". That's pretty cool.

    Example using aws-cdk based on java:

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

    AWS-Doc CDK Tagging

    AWS CDK Reference: Tag

    Tags can be applied to any construct. Tags are inherited, based on the scope. If you tag construct A, and A contains construct B, construct B inherits the tag.

    Example from aws-cdk doc:

    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');
    
    0 讨论(0)
  • 2021-01-19 22:11

    The above answers use the deprecated syntax.

    Newer version of tagging the whole App:

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

    You could also tag individual stacks only:

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

    Or individual Constructs:

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

    Tags will apply to sub-Constructs hierarchically.

    0 讨论(0)
提交回复
热议问题