この記事は公開されてから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"
}
}
他にもタグの削除や、特定リソースのみタグ付けといったことも可能です。
// Envタグの削除
cdk.Tags.of(app1Stack).remove("Env");
// SQSにだけタグを付与
cdk.Tags.of(app).add('Service', 'SQS', {
includeResourceTypes: ['AWS::SQS::Queue'],
});
おわりに
CDKでもシンプルに共通のタグ付与ができます。 便利なので、ぜひ使ってみてください。
以上、AWS事業本部の佐藤(@chari7311)でした。