Slide 1

Slide 1 text

AWS CDK Conference Japan 2023 リリースノートにないCDKのアップデートを見てみよう 2023/05/20 渡邉 洋平(watany) 1

Slide 2

Slide 2 text

AWS CDK クイズの時間です 2

Slide 3

Slide 3 text

Q1. lambda.Runtime.Python_3_10 が 使えるようになったバージョンは? 3

Slide 4

Slide 4 text

A1. 4

Slide 5

Slide 5 text

Q2. rds.AuroraPostgresEngineVersion.VER_15_2 が 使えるようになったバージョンは? 5

Slide 6

Slide 6 text

A2. 6

Slide 7

Slide 7 text

リリースノート見てもわからなくない? 7

Slide 8

Slide 8 text

だから今日話すのは "リリースノートにない CDK のアップデートを見てみよう" 8

Slide 9

Slide 9 text

About me Watanabe Yohei (Twitter: _@watany) :company: NTT TechnoCross Corporation Role: AWS Architect, Instructor, CCoE AWS, CDK Japan AWS Top Engineer (2023) ALL AWS Certifications Engineer(2022,2023) AWS Community Builder(Cloud Operations) Contributer(AWS CDK) 9

Slide 10

Slide 10 text

Contributer(AWS CDK) 2022/7 から参加 まあまあやっている 内訳 feat: 10 fix: 3 refactor: 1 docs: 3 chore: 26 10

Slide 11

Slide 11 text

さっきの「内訳」とは? 11

Slide 12

Slide 12 text

英語が苦手な人向け 12

Slide 13

Slide 13 text

Q3. なぜ Q2 は CHANGE LOG に載っていなかったか A3.以下の chore コミットだったから 13

Slide 14

Slide 14 text

"リリースノートにない CDK のアップデートを見てみよう" = "CDK の Chore での PR を見てみよう" 14

Slide 15

Slide 15 text

chore is 何 15

Slide 16

Slide 16 text

CDK における Chore chore:直接的にユーザーに利益をもたらさない何か (CHANGELOG には載りません)。 通常はビルドスクリプト、設定、または CHANGELOG に 表示するには些細すぎる変更に使用されます。 Conventional Commits からみる Chore commitlint のリストが元ネタ https://github.com/conventional- changelog/commitlint/tree/master/%40commitlint/co nfig-conventional 16

Slide 17

Slide 17 text

ちなみに chore の和訳 雑用、雑仕事、面倒な仕事 17

Slide 18

Slide 18 text

CDK における chore の具体例 18

Slide 19

Slide 19 text

具体例1:CDK 開発資材更新 開発資材のお引越し @aws-cdk/ To aws-cdk-lib/ https://github.com/aws/aws-cdk/pull/24376 19

Slide 20

Slide 20 text

余談 この引っ越しがどのくらい大規模かというと 20

Slide 21

Slide 21 text

具体例2:いろいろ お引っ越しに伴う Contribure ガイドの更新 https://github.com/aws/aws-cdk/pull/25321 21

Slide 22

Slide 22 text

具体例2:いろいろ Copyright の年を更新 これが一致していないと CI が落ちます! https://github.com/aws/aws-cdk/pull/23540 22

Slide 23

Slide 23 text

具体例2:いろいろ codebuild.WindowsBuildImage https://github.com/aws/aws-cdk/pull/22259 23

Slide 24

Slide 24 text

Appendix. わしが育てた VPC Endpoint: +136 ResourceType: +92 Configrule:+178 RDS Version +57 24

Slide 25

Slide 25 text

ずっと気になっていたこと プロパティ追加、 feat と chore の違いって何? feat で追加されがち lambda.Runtime eks.KubernetesVersion chore で追加されがち ec2.InstanceClass rds.AuroraPostgresEngineVersion 25

Slide 26

Slide 26 text

違いはマジでわからん Merge 済のコミットを見て、雰囲気を確認するしかない わざわざ integ テスト要らなくない?と判断されると Chore で処理されてる感(私見) ポジティブに考えると、Contribute 入門チャンス 26

Slide 27

Slide 27 text

いかがでしたか? chore へのスタンスは、多分 2 通り 1. Release Note に載らない ≒ 利用者影響が少ない。あまり気にしない 最新版で良くなってるならええか 2. リリースごとにまじめににコミットを追う バージョンは極力固定したい、中身もすべて把握したいが? 納得しない人向けのトピックも用意しました 27

Slide 28

Slide 28 text

CDK をバージョンアップしない理由と立ち向かう 28

Slide 29

Slide 29 text

知ってほしい前提 CloudFormation Template に stable 版はない CDK にも stable 版はない 29

Slide 30

Slide 30 text

CloudFormation は定期的にアップデートしているぞ 30

Slide 31

Slide 31 text

CloudFormation が不変と勘違いしてしまう一因 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/format-version-structure.html 31

Slide 32

Slide 32 text

実際は毎週更新されている AWS のサービス/機能の拡充に合わせて成長している https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html 32

Slide 33

Slide 33 text

CloudFormation 自体、更新が活発という事は…… CloudFormation のアプデを取り込まないと CDK の L1 Construct が作れない L1 Construct がないと、L2 以降の Construct も作れない つまり CDK は常に CloudFormation を追従し続ける=安定版の不在 可能な限り最新版を扱う意思が必要 33

Slide 34

Slide 34 text

Appendix. CDK のリリースサイクル 基本的に週 1 リリース(水曜、木曜あたり) ”2.AA.B”の AA が+1 目玉機能が出ると、単体でリリース クリティカルなバグがあると B が+1 だいたい 2.AA.1 まで 詳細は https://github.com/aws/aws-cdk/releases あるいは#cdk_releases で紹介が読める! https://twitter.com/konokenj/status/1656492582 539759618 34

Slide 35

Slide 35 text

アップデートに逆らわず、最新版を使い続けるには? 「テストをしましょう」 35

Slide 36

Slide 36 text

テストに苦手意識がある? 36

Slide 37

Slide 37 text

CDK には ”Snapshot Testing” がある 37

Slide 38

Slide 38 text

Snapshot Testing CDK から生成される CFn テンプレートを以前と比較し、差分の有無をテストする手法 実施のモチベーション CDK を最新化して挙動が変わったら困る? 以前と同じテンプレートが生成できればよい筈。 リファクタリングも気軽にできる 手動で「cdk synth」のテンプレートを保存して diff しなくてもいいぞ! 38

Slide 39

Slide 39 text

でも、難しいんでしょ? 難しいものは続かない…… 手順がイメージできなければ、そもそも始められない…… 本日、完全公開します 39

Slide 40

Slide 40 text

Snapshot Testing の始め方は 以下、TypeScript の例 cdk init したばかりの test/aaaa.ts 40

Slide 41

Slide 41 text

コメントアウトを外すだけ 41

Slide 42

Slide 42 text

(Stack ごとに)1行追加するだけ Snapshot test の完成!! 42

Slide 43

Slide 43 text

Usage npx jest で Snapshot を取得 Snapshot は Git 管理しよう コード変更/CDK の最新化/リファクタしたら、とりあえず npx jest 差分を確認して なら npx jest -u でアップデート これならできそう! 43

Slide 44

Slide 44 text

Appendix. もっと楽に書きたい except~のくだり、元から書いてあればいいのに projen から輸入したコミット https://github.com/aws/aws-cdk/pull/25596/ 44

Slide 45

Slide 45 text

まとめ CDK の chore、それはコントリビュートチャンス ちょっと気になるけど気にせずに、CDK の最新版を使えば解決します アップデートの不安は Snapshot Test で解消だ 45

Slide 46

Slide 46 text

Thank You! 46