AWS CDKを使用して、AWSサービスの構築をしています。
今回は、定義したスタックとそのスタックで作成される各サービスに一括して、タグを付与していきます。
cdk.Tagsオプションによるタグ付け
aws cdkでタグを付ける場合、それぞれのサービス定義で付与してもいいですが、スタック単位で一括してタグ作成することが可能です。
今回のプロジェクトでは、cdk app
のファイル(初期でbinディレクトリ直下のファイル)を作成しています。
さらに、スタックファイルは、API GatewayとLambdaを構築するためのapiStack.tsとVPCを構築するためのvpcStack.tsの二つを作成している状態です。
スタック単位で一括して、タグ付けする場合、cdk app
のファイルで、aws-cdk-lib
ライブラリのTagsを利用して付与することができます。
cdk appの更新
binディレクトリ直下のcdk定義ファイルを更新していきます。
現状はいかのように、apiStackとvpcStackを実行している状態です。
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { ApiStack } from '../lib/ApiStack';
import { VpcStack } from '../lib/VpcStack';
async function createApp(): Promise<cdk.App> {
const app = new cdk.App();
const ApiStack = new ApiStack(app, `ApiStack`, )
const VpcStack = new VpcStack(app, `VpcStack`, )
return app
}
createApp()
タグのつけ方は二種類
タグのつけ方は、スタックを指定してタグ付けする方法とすべてのスタックに一括してつける方法があります。
cdk.Tags
の使い方は以下のようになります。
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { ApiStack } from '../lib/ApiStack';
import { VpcStack } from '../lib/VpcStack';
async function createApp(): Promise<cdk.App> {
const app = new cdk.App();
const ApiStack = new ApiStack(app, `ApiStack`, )
const VpcStack = new VpcStack(app, `VpcStack`, )
// すべてのスタックに共通タグを付与
cdk.Tags.of(app).add("Project", "samplePloject");
// スタックを指定してタグを付与
cdk.Tags.of(ApiStack).add("group", "sampleGroup")
return app
}
createApp()
違いは、引数の指定だけです。
appを引数に入れるとすべてのスタックに共通のタグが付与され、スタックファイル名を引数にしてすると、そのスタックにのみタグが付与されます。
タグの作り方は、各プロジェクトによって異なるかと思いますが、私の場合は、プロジェクト単位で共通のタグを使用することにしていますので、主にappによる一括指定のみを利用しています。
サービスにもタグは付与される
スタックに付与したタグですが、スタックとそのスタックが作成するサービスに共通してタグが付与されます。
今回は、API Stackに付与したタグをAPI GatewayとLambdaにも付与されているか確認してみます。
Apiスタックのタグ
実際のプロジェクト利用のスクショとなりますので、一部モザイクかけていますが、以下のようにprojectタグがしっかり付与されています。
API Gatewayのタグ
API Gatewayの場合、タグ設定がやや確認しにくいですが、サイドメニューの「設定」から「タグの設定」ボタンをクリックするとタグ編集が可能になります。
スタック経由で作成されたサービスは、今回直接付与した「Project」というタグ以外にも、cloudFormationで作成したことを示すタグが自動的に増えよされています。
Lambdaのタグ
Lambdaファンクションも同様に指定したタグとcloudformation経由の自動的なタグが付与されています。
これで、スタックにタグを付与するとそのスタックで作成されるサービスにもまとめてタグが付与されていることが確認できました。
おわりに
一つのAWSアカウントで複数プロジェクトを開発していくと、コスト管理のためにもタグの設定は必須ですよね。
AWS CDKなどを利用すると多くのサービスが一挙に作成されますので、タグ付けが一括にできたことのメリットは非常に大きいです。
コメント