如何通过CDK为AppSync API创建的日志组添加标签?
如何给AppSync API自动创建的日志组添加标签
我用CDK创建了一个AppSync API,代码如下:
const api = new appsync.GraphqlApi(this, 'Api', { name: 'demo', schema: 'schema.graphql', authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.API_KEY, }, }, xrayEnabled: true, logConfig: { fieldLogLevel: appsync.FieldLogLevel.ALL } });
但通过全局添加标签的方式,只有API本身会被打上标签,自动创建的CloudWatch日志组不会被标记:
const app = new cdk.App(); new ApiStack(app, 'ApiStack'); Tags.of(app).add('environment', 'dev');
请问怎么确保日志组也能被打上标签?
解决方案
方法一:直接给日志组添加标签
AppSync的GraphqlApi实例暴露了logGroup属性,可以直接获取到自动创建的日志组对象,然后为它单独添加标签:
const api = new appsync.GraphqlApi(this, 'Api', { // 保留原有的API配置 name: 'demo', schema: 'schema.graphql', authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.API_KEY, }, }, xrayEnabled: true, logConfig: { fieldLogLevel: appsync.FieldLogLevel.ALL } }); // 给日志组添加指定标签 Tags.of(api.logGroup!).add('environment', 'dev');
由于启用了logConfig,api.logGroup必然存在,所以可以用!断言非空。
方法二:配置标签全局传播策略
如果希望全局标签自动覆盖所有资源(包括隐式创建的日志组),可以在Stack层面添加标签时,设置传播规则为包含所有子资源:
const app = new cdk.App(); const apiStack = new ApiStack(app, 'ApiStack'); // 让标签应用到Stack下的所有资源,包括自动创建的日志组 Tags.of(apiStack).add('environment', 'dev', { excludeResourceTypes: [], // 不排除任何资源类型 applyToLaunchedInstances: true // 确保传播到嵌套资源 });
这种方式不需要单独处理日志组,所有属于该Stack的资源都会被打上标签。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

