11

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

4

5 回答 5

27

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

标记整个应用程序的较新版本:

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

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

于 2020-10-29T08:55:52.590 回答
12

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

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

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

AWS-Doc CDK 标记

AWS CDK 参考:标签

标签可以应用于任何构造。标签是继承的,基于范围。如果您标记构造 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');
于 2019-03-04T19:49:58.447 回答
2

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

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)
于 2021-03-25T19:01:57.310 回答
0

因为您可能希望将多个标签添加到构造中,所以传递标签对象很方便。您可以使用 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"}));

于 2019-12-18T12:14:33.427 回答
0

使用JavaSDK:

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 difffor 验证更改,输出将类似于以下内容:

(base) [alessiosavi@localhost cdk-init-cluster]$ cdk diff
                   CdkInitClusterStack
Resources
[~] AWS::DynamoDB::Table cdk-test-table cdktesttableB0274F47 
 └─ [+] Tags
     └─ [{"Key":"Project","Value":"Value"}]
于 2020-01-15T22:10:53.770 回答