概要
AWSリソースには付加情報としてタグを付与することができます。
タグは以下のようなケースで、請求金額の管理を行うためなどに利用されます。
・同一アカウントで複数環境を作成している場合、作成したAWSリソースがどの環境のものかわかるようにする
・同一アカウントで複数の部署がAWS環境を触っている場合、作成したAWSリソースがどの部署のものかわかるようにする
・同一アカウントで複数のシステムを作成している場合、作成したAWSリソースがどのシステムのものかわかるようにする
試してみた
では、実際にCDKでタグを付与してみます。
Stack APPのCDKは以下になります。
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { SalesPlanningStack } from '../lib/stack_sales_planning';
import { DevelopmentStack } from '../lib/stack_development';
const app = new cdk.App();
const developmentStack = new DevelopmentStack(app, 'DevelopmentStack', {
});
const salesPlanningStack = new SalesPlanningStack(app, 'SalesPlanningStack', {
});
cdk.Tags.of(app).add("env", app.node.tryGetContext(`environment`)); // 環境
cdk.Tags.of(salesPlanningStack).add("department", "sales_planning"); // 部署(営業部)
cdk.Tags.of(developmentStack).add("department", "development"); // 部署(開発部)
・cdk.Tags.of(app)
で全てのスタック配下の全てのAWSリソースに共通のタグを付与します。
・cdk.Tags.of(salesPlanningStack)
でsalesPlanningStack配下の全てのAWSリソースに共通のタグを付与します。
部署(営業部)と 部署(開発部)のCDKは以下になります。
※今回はタグの付与確認が目的のため、どちらもS3バケットのみ作成します。
import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';
export class SalesPlanningStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.CfnBucket(this, 'CreateSalesPlanningBucket', {
bucketName: 'sales-planning-tag-bucket'
});
}
}
import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';
export class DevelopmentStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.CfnBucket(this, 'CreateDevelopmentBucket', {
bucketName: 'development-tag-bucket'
});
}
}
デプロイ実施時に引数で環境名を渡して、各スタックをデプロイします。
cdk deploy '*' --context environment=dev
作成したS3バケットのタグを確認すると、全スタック共通の環境名と、当スタックの部署名が付与されていることが確認できます。
おわりに
今回はCDKにおける共通タグの付与方法について説明させて頂きました。
内容としてはシンプルなものになりますが、ご参考になれば幸いです。