17. 17
17
CDK Day 2022にてGA発表
l AWSのドキュメントページ上は2022/07/06時点では追いついていないですが・・・
l GitHub上のREADMEではバッチリ利用可能として記載
(*1) https://github.com/aws/aws-cdk/labels/language%2Fsupport
28. 28
28
CDKでGolangを利用する際の特有の処理
l 内部的にはただのポインタ
l jsii.Number → func Number(v float64) *float64 { return &v }
l jsii.String → func String(v string) *string { return &v }
l GolangにはTypeScriptにおけるnull型やundefined型に相当するOptionalな型が存在しない
l nil という概念があるが型定義としては使えない
l Optionalな引数として指定するためにポインタとして渡す必要がある
l このような特徴は他のInfrastructure as CodeのGolang実装でも見られる(例:Pulumi)
41. 41
41
オプショナル項目を取り扱うためにjsii.XXXによるラップ処理
l ドキュメントにも明確に記載(*1)
l (再掲)このような特徴は他のInfrastructure as CodeのGolang実装でも見られる
l Optional引数/デフォルト引数などは言語仕様として利用できない
l Functional Options Pattern(*2) を利用して設定も可能
l CDKの実装としてPrimitive typesであってもポインタとして扱う
l これによりRequiredな項目が急遽Optionalになった場合であってもコードベースは動作することを保証
l 一貫性を保つために自身で拡張したコードについても同様の方針としたほうが読み手の負荷が下がる
(*1) https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/work-with-cdk-go.html
(*2) https://github.com/uber-go/guide/blob/master/style.md#functional-options
46. 46
46
ようやくGolangでCDKが胸を張ってかけるようになりました
l GAまでの経緯
l Developer Previewから1年ほどのロングジャーニー
l CDK DayにあわせてGAというAWSらしい盛り上げる演出
l シンプルな言語仕様と型制約を生かしたInfrastructure as Codeの実現
l アプリケーションと同一の言語を採用したDevOpsの加速の手助け
l Goらしさが少し欠ける場所でGolangエンジニアは少し違和感を感じるかも?
l まだまだGAされたばかりなので深堀りして楽しんでいきたい
l Golang上級者は是非いろいろやっていきましょう!