AWS CDKで管理しているリソースに一括で共通タグを付与する
「全てのリソースに同じタグを付与したい!」
環境用のタグやシステム名のタグなど、一括でタグを付与したいことがあると思います。
Terraformでは、AWS Providerのdefault tags機能で実現できます。
CDKでも簡単に実現できるので、紹介します。
一括でタグの付与
Tags.of(SCOPE).add('key', 'value');
こんな感じで、App全体やStack単位で共通のタグを付与することができます。
Tagging - AWS Cloud Development Kit (CDK) v2
やってみた
共通のタグを付与
#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as sqs from 'aws-cdk-lib/aws-sqs'; const app = new cdk.App(); export class AppStack extends cdk.Stack { constructor(scope: Construct, id: string, queueName: string ,props?: cdk.StackProps){ super(scope, id ,props); new sqs.Queue(this, queueName, { queueName: queueName }); } } const app1Stack = new AppStack(app, "App1Stack", "app1-queue"); const app2Stack = new AppStack(app, "App2Stack", "app2-queue"); cdk.Tags.of(app).add("Env", "Test"); cdk.Tags.of(app1Stack).add("System", "app1"); cdk.Tags.of(app2Stack).add("System", "app2");
SQSが2個作成され、両方のタグに「Env:Test」が付与されます。 スタック単位でもタグ付けしたので、app1Stackには「System: app1」、app2Stackには「System: app2」タグがつきます。
$ aws sqs list-queue-tags --queue-url https://sqs.ap-northeast-1.amazonaws.com/<AWSアカウントID>/app1 { "Tags": { "Env": "Test", "System": "app1" } } $ aws sqs list-queue-tags --queue-url https://sqs.ap-northeast-1.amazonaws.com/<AWSアカウントID>/app2 { "Tags": { "Env": "Test", "System": "app2" } }
他にもタグの削除や、特定リソースのみタグ付けといったことも可能です。
// Envタグの削除 cdk.Tags.of(app1Stack).remove("Env"); // SQSにだけタグを付与 cdk.Tags.of(app).add('Service', 'SQS', { includeResourceTypes: ['AWS::SQS::Queue'], });
おわりに
CDKでもシンプルに共通のタグ付与ができます。 便利なので、ぜひ使ってみてください。
以上、AWS事業本部の佐藤(@chari7311)でした。