BioErrorLog Tech Blog

試行錯誤の記録

AWS CDKでTagを付与する

AWS CDKでTagを付与する方法の備忘録です。

はじめに

こんにちは、@bioerrorlogです。

CDKでリソースにTagを付与するとき、やり方を忘れてググり直すことがしばしばあります。

いちいち調べなくてもいいように、Tagの付与方法をメモします。

環境

今回は以下の環境で作業しました:
CDK version: 1.92.0
OS: Amazon Linux 2 (Cloud9)

CDKでTagを付与する

CDKでTagを付与するには、Tagsクラスを用いたやり方が推奨されています。

Tagging - 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-001tag-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を付与することが出来ます。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

参考

Tagging - AWS Cloud Development Kit (AWS CDK) v2

Tags — AWS Cloud Development Kit 1.170.1 documentation

Tag — AWS Cloud Development Kit 1.170.1 documentation