如何将标签添加到特定于AWS-CDK的构造中,或者甚至向堆栈中创建的所有资源添加更好的标签定义?
答案 0 :(得分:2)
根据aws-cdk doc,您可以将标记添加到所有构造/资源。标签将继承到同一“树”中的构造。太酷了。
使用基于Java的aws-cdk的示例:
MyStack stack = new MyStack(app, "nameOfStack");
stack.apply(new Tag("tag_foo", "value_bar"));
标签可以应用于任何结构。标签是基于 范围。如果标记构造A,并且A包含构造B,则构造B 继承标签。 Tag API支持:
aws-cdk文档中的示例:
import cdk = require('@aws-cdk/cdk');
const app = new cdk.App();
const theBestStack = new cdk.Stack(app, 'MarketingSystem');
theBestStack.node.apply(new cdk.Tag('StackType', 'TheBest'));
答案 1 :(得分:1)
以上答案使用了不赞成使用的语法。
标记整个应用的较新版本:
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 :(得分: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"}));
答案 3 :(得分:0)
使用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();
}
}
然后重新创建罐子
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"}]
答案 4 :(得分:0)
您可以在 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)