AWS CDKで管理しているリソースに一括で共通タグを付与する

AWS CDKでも簡単に全AWSリソースに共通タグを付与することができます。
2022.05.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

「全てのリソースに同じタグを付与したい!」

環境用のタグやシステム名のタグなど、一括でタグを付与したいことがあると思います。

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"
    }
}

ssm tag

他にもタグの削除や、特定リソースのみタグ付けといったことも可能です。

// Envタグの削除
cdk.Tags.of(app1Stack).remove("Env");

// SQSにだけタグを付与
cdk.Tags.of(app).add('Service', 'SQS', {
  includeResourceTypes: ['AWS::SQS::Queue'],
});

おわりに

CDKでもシンプルに共通のタグ付与ができます。 便利なので、ぜひ使ってみてください。

以上、AWS事業本部の佐藤(@chari7311)でした。