AWS CDKでTagを付与する方法の備忘録です。
はじめに
CDKでリソースにTagを付与するとき、やり方を忘れてググり直すことがしばしばあります。
いちいち調べなくてもいいように、Tagの付与方法をメモします。
環境
今回は以下の環境で作業しました:
CDK version: 1.92.0
OS: Amazon Linux 2 (Cloud9)
CDKでTagを付与する
CDKでTagを付与するには、Tagsクラスを用いたやり方が推奨されています。
Tags and the AWS CDK - AWS Cloud Development Kit (AWS CDK) v2
※他にはTagクラスを用いたやり方もありますが、非推奨となっています。
以下、Pythonを例にTag付与方法を見ていきます。
具体例
以下の形でTagを付与します。
Tags.of(SCOPE).add(key, value)
SCOPE
にはConstructやStackを指定し、tag
, value
にはそれぞれタグのキーと値を指定します。
以下、具体例を挙げます。
Stack単位でTagを付与する
from aws_cdk import ( aws_s3 as s3, core ) class TagSampleStack(core.Stack): def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) s3_01 = s3.Bucket(self, "TagTestBucket01", bucket_name="tag-test-bucket-001") s3_02 = s3.Bucket(self, "TagTestBucket02", bucket_name="tag-test-bucket-002") app = core.App() tag_sample_stack = TagSampleStack(app, "tag-sample") # Stackにタグを付与する core.Tags.of(tag_sample_stack).add("Project", "TagTest") app.synth()
このようにStackに対してTagを付与すると、Stackに含まれるリソースすべてに対してTagが付与されます。
上記のケースですと、Stackに含まれるふたつのS3バケットtag-test-bucket-001
、tag-test-bucket-002
の両方にProject: TagTest
のTagが付与されます。
Construct単位でTagを付与する
from aws_cdk import ( aws_s3 as s3, core ) class TagSampleStack(core.Stack): def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) s3_01 = s3.Bucket(self, "TagTestBucket01", bucket_name="tag-test-bucket-001") s3_02 = s3.Bucket(self, "TagTestBucket02", bucket_name="tag-test-bucket-002") # ConstructにTagを付与する core.Tags.of(s3_01).add("Project", "TagTest") app = core.App() tag_sample_stack = TagSampleStack(app, "tag-sample") app.synth()
このように特定のConstructに対してTagを付与すると、対象のConstructに対してのみTagが付与されます。
上記のケースでは、S3バケットtag-test-bucket-001
にのみProject: TagTest
のTagが付与されます。
補足: 非推奨のTag付与方法
以下のようにTagクラスを用いてもTagを付与することはできますが、このやり方は非推奨となっています。
Tag.add(SCOPE, key, value)
コード例:
from aws_cdk import ( aws_s3 as s3, core ) class TagSampleStack(core.Stack): def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) s3_01 = s3.Bucket(self, "TagTestBucket01", bucket_name="tag-test-bucket-001") s3_02 = s3.Bucket(self, "TagTestBucket02", bucket_name="tag-test-bucket-002") app = core.App() tag_sample_stack = TagSampleStack(app, "tag-sample") # Tagクラスを用いてTagを付与 core.Tag.add(tag_sample_stack, "Project", "TagTest") app.synth()
上記のコードを実行すると、以下のようにTag.add
の使用は非推奨との警告が表示され、代わりTags.of(scope).add(k,v)
の使用を推奨されます。
[Warning at /tag-sample] The API @aws-cdk/core.Tag.add(scope,k,v) is deprecated: Use "Tags.of(scope).add(k,v)" instead. This API will be removed in the next major release
おわりに
今回は、CDKでのTagの付与方法をメモしました。
Pythonを例にやり方を書きましたが、他の言語でも基本同じやり方でTagを付与することが出来ます。
どなたかの参考になれば幸いです。
[関連記事]