はじめに

普段はTypeScriptでCDKを書いていますが、Golangはあまり触ってこなかったため
タグを付与する方法に戸惑ってしまったので、備忘録として残しておきます。

CDK in Go でのタグ付けの基本

最初にタグ付けの基本です。
CDKではリソース・Stack・App単位に対して以下のように記述することで、タグ付けを行うことができます。

TypeScript

# main.ts
Tags.of(myConstruct).add('key', 'value');

Golang

# main.go
awscdk.Tags_Of(myConstruct).Add(jsii.String("key"), jsii.String("value"), &awscdk.TagProps{})

// example resource
queue := awssqs.NewQueue(stack, jsii.String("DemoCdkQueue"), &awssqs.QueueProps{
  VisibilityTimeout: awscdk.Duration_Seconds(jsii.Number(300)),
})

// add tag
awscdk.Tags_Of(queue).Add(jsii.String("Owner"), jsii.String("s-tanaka"), &awscdk.TagProps{})

全てのリソースにタグを付与する方法

先述のように Stack, App 単位でリソースへのタグ付けも可能です。
それぞれ以下のように記述することでタグ付けができるようになります。

Stack 内の全てのリソースにタグを付与

var sprops awscdk.StackProps
if props != nil {
  sprops = props.StackProps
}
stack := awscdk.NewStack(scope, &id, &sprops)

// add tag
awscdk.Tags_Of(stack).Add(jsii.String("Owner"), jsii.String("s-tanaka"), &awscdk.TagProps{})

App 内全てのリソースにタグを付与

app := awscdk.NewApp(nil)

NewDemoCdkStack(app, "DemoCdkStack", &DemoCdkStackProps{
  awscdk.StackProps{
    Env: env(),
  },
})

// add tag
awscdk.Tags_Of(app).Add(jsii.String("Owner"), jsii.String("s-tanaka"), &awscdk.TagProps{})

まとめ

CDK ではじめて Golang を触り、ポインタを使うのがややこしいと感じましたが
Golang を使うにあたってポインタは避けれない概念だと思うので、CDK を使いながら学んでいけたらと思いました。

参考

AWS CDK in Go の使用
タグと AWS CDK