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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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

Avatar for horsewin

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