Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GAになったGolangでCDKを触ってみよう

 GAになったGolangでCDKを触ってみよう

horsewin

July 13, 2022
Tweet

More Decks by horsewin

Other Decks in Technology

Transcript

  1. 2 2 horsewin (Atsushi Umakatsu) PdM / Frontend Engineer Personality

    l 金融システムのエンジニア l 書籍の執筆にも積極的 l 最近興味があるのはNyantech HorseVictory horsewin
  2. 7 7 Golangとは l 2007年にGoogleによって開発されたプログラミング言語(*1) l 各所に登場するGopher(*2)くんで知られるプログラミング言語 l クマにもみえますが「ホリネズミ」だそうです l

    Gopherとは分散システムのテキスト検索のプロトコルでも(*3) l Golangにおけるメリット l シンプルな言語仕様 l シングルバイナリとして手軽に取り扱い可能 l パフォーマンス l デフォルトで規定されるツールチェーン l Etc...  IUUQTHPEFWTPMVUJPOTDBTFTUVEJFT  (PQIFSCZ3FOÉF'SFODI  3'$ͱͯ͠نఆ
  3. 14 14 CDKで利用できる言語 JavaScript TypeScript Python Java C# 〜 2021/04

    JavaScript TypeScript Python Java C# Golang (DP) 2021/05〜 %1%FWFMPQFS1SFWJFXɺ։ൃऀϓϨϏϡʔ
  4. 15 15 CDKで利用できる言語 DP = Developer Preview、開発者プレビュー JavaScript TypeScript Python

    Java C# 〜 2021/04 JavaScript TypeScript Python Java C# Golang (DP) 2021/05〜 プレビュー期間が思った以上に長く・・・
  5. 16

  6. 18 18 JavaScript TypeScript Python Java C# 〜 2021/04 JavaScript

    TypeScript Python Java C# Golang (DP) 2021/05〜 %1%FWFMPQFS1SFWJFXɺ։ൃऀϓϨϏϡʔɺ("(FOFSBMMZ"WBJMBCMFɺҰൠར༻Մೳ JavaScript TypeScript Python Java C# Golang (GA) 2022/05/22〜 CDKで利用できる言語
  7. 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)
  8. 39 39 少しGolangらしくないエラーハンドリング l GolangのエラーハンドリングではFuncの結果として実行結果とエ ラーオブジェクトを取得する事が多い l CDKのGolangでは実行結果のみを受け取る l Cloud

    Formationへの変換層としてCDKを位置づけており、リソースを生 成するCloud Formationからのエラーを受け取るわけではない l ランタイムレイヤのエラーハンドリングはあまり意識していない?
  9. 40 40 少しGolangらしくないエラーハンドリング l `cdk deploy` 時にエラー発生時はpanicをさせる l `go build`

    はコンパイルするだけなので検知されない l これによりエラー発生箇所の検知が可能 l たしかに変換層としてはこれでも十分な感じもする l エラーハンドリングにコストを掛けないという印象
  10. 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 一貫性を保つために自身で拡張したコードについても同様の方針としたほうが読み手の負荷が下がる  IUUQTEPDTBXTBNB[PODPNKB@KQDELWHVJEFXPSLXJUIDELHPIUNM  IUUQTHJUIVCDPNVCFSHPHVJEFCMPCNBTUFSTUZMFNEGVODUJPOBMPQUJPOT
  11. 44 44 なれている人はTypeScriptの方が優勢か l 言語仕様 l CDKで記述するTypeScript自体もあまりTypeScriptの複雑は型パズル利用なし l 双方ともに、あくまでシンプルな言語仕様部分を利用するため大きな差異なし l

    ドキュメント l TypeScriptの方が検索もしやすく見やすい(主観) l エラー発生箇所の特定 l TypeScriptではthrowされてきたエラーオブジェクトを伝搬して特定 l GolangではPanicによる大域脱出 l その他 l IDEの恩恵はいずれも同様に十分に教授可能 l コンテナ上で動くバックエンドアプリはGoが強い(主観)ためアプリケーションコードと 言語セットを揃えることができる強み
  12. 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上級者は是非いろいろやっていきましょう!
  13. 49