AWS CDK Conference Japan 2023 にてお話しした内容になります。 「リリースノートにないCDKのアップデートを見てみよう」 https://jawsug-cdk.connpass.com/event/278205/
AWS CDK Conference Japan 2023リリースノートにないCDKのアップデートを見てみよう2023/05/20渡邉 洋平(watany)1
View Slide
AWS CDK クイズの時間です2
Q1. lambda.Runtime.Python_3_10 が使えるようになったバージョンは?3
A1.4
Q2. rds.AuroraPostgresEngineVersion.VER_15_2 が使えるようになったバージョンは?5
A2.6
リリースノート見てもわからなくない?7
だから今日話すのは"リリースノートにない CDK のアップデートを見てみよう"8
About meWatanabe Yohei (Twitter: [email protected]):company: NTT TechnoCross CorporationRole: AWS Architect, Instructor, CCoEAWS, CDKJapan AWS Top Engineer (2023)ALL AWS Certifications Engineer(2022,2023)AWS Community Builder(Cloud Operations)Contributer(AWS CDK)9
Contributer(AWS CDK)2022/7 から参加まあまあやっている内訳feat: 10fix: 3refactor: 1docs: 3chore: 2610
さっきの「内訳」とは?11
英語が苦手な人向け12
Q3. なぜ Q2 は CHANGE LOG に載っていなかったかA3.以下の chore コミットだったから13
"リリースノートにない CDK のアップデートを見てみよう"="CDK の Chore での PR を見てみよう"14
chore is 何15
CDK における Chorechore:直接的にユーザーに利益をもたらさない何か(CHANGELOG には載りません)。通常はビルドスクリプト、設定、または CHANGELOG に表示するには些細すぎる変更に使用されます。Conventional Commits からみる Chorecommitlint のリストが元ネタhttps://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional16
ちなみにchore の和訳雑用、雑仕事、面倒な仕事17
CDK における chore の具体例18
具体例1:CDK 開発資材更新開発資材のお引越し @aws-cdk/ To aws-cdk-lib/https://github.com/aws/aws-cdk/pull/2437619
余談この引っ越しがどのくらい大規模かというと20
具体例2:いろいろお引っ越しに伴う Contribure ガイドの更新https://github.com/aws/aws-cdk/pull/2532121
具体例2:いろいろCopyright の年を更新これが一致していないと CI が落ちます!https://github.com/aws/aws-cdk/pull/2354022
具体例2:いろいろcodebuild.WindowsBuildImagehttps://github.com/aws/aws-cdk/pull/2225923
Appendix.わしが育てたVPC Endpoint: +136ResourceType: +92Configrule:+178RDS Version +5724
ずっと気になっていたことプロパティ追加、 feat と chore の違いって何?feat で追加されがちlambda.Runtimeeks.KubernetesVersionchore で追加されがちec2.InstanceClassrds.AuroraPostgresEngineVersion25
違いはマジでわからんMerge 済のコミットを見て、雰囲気を確認するしかないわざわざ integ テスト要らなくない?と判断されると Chore で処理されてる感(私見)ポジティブに考えると、Contribute 入門チャンス26
いかがでしたか?chore へのスタンスは、多分 2 通り1. Release Note に載らない ≒ 利用者影響が少ない。あまり気にしない最新版で良くなってるならええか2. リリースごとにまじめににコミットを追うバージョンは極力固定したい、中身もすべて把握したいが?納得しない人向けのトピックも用意しました27
CDK をバージョンアップしない理由と立ち向かう28
知ってほしい前提CloudFormation Template に stable 版はないCDK にも stable 版はない29
CloudFormation は定期的にアップデートしているぞ30
CloudFormation が不変と勘違いしてしまう一因https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/format-version-structure.html31
実際は毎週更新されているAWS のサービス/機能の拡充に合わせて成長しているhttps://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html32
CloudFormation 自体、更新が活発という事は……CloudFormation のアプデを取り込まないと CDK の L1 Construct が作れないL1 Construct がないと、L2 以降の Construct も作れないつまり CDK は常に CloudFormation を追従し続ける=安定版の不在可能な限り最新版を扱う意思が必要33
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/165649258253975961834
アップデートに逆らわず、最新版を使い続けるには?「テストをしましょう」35
テストに苦手意識がある?36
CDK には ”Snapshot Testing” がある37
Snapshot TestingCDK から生成される CFn テンプレートを以前と比較し、差分の有無をテストする手法実施のモチベーションCDK を最新化して挙動が変わったら困る? 以前と同じテンプレートが生成できればよい筈。リファクタリングも気軽にできる手動で「cdk synth」のテンプレートを保存して diff しなくてもいいぞ!38
でも、難しいんでしょ?難しいものは続かない……手順がイメージできなければ、そもそも始められない……本日、完全公開します39
Snapshot Testing の始め方は以下、TypeScript の例cdk init したばかりの test/aaaa.ts40
コメントアウトを外すだけ41
(Stack ごとに)1行追加するだけSnapshot test の完成!!42
Usagenpx jest で Snapshot を取得Snapshot は Git 管理しようコード変更/CDK の最新化/リファクタしたら、とりあえず npx jest差分を確認して なら npx jest -u でアップデートこれならできそう!43
Appendix. もっと楽に書きたいexcept~のくだり、元から書いてあればいいのにprojen から輸入したコミットhttps://github.com/aws/aws-cdk/pull/25596/44
まとめCDK の chore、それはコントリビュートチャンスちょっと気になるけど気にせずに、CDK の最新版を使えば解決しますアップデートの不安は Snapshot Test で解消だ45
Thank You!46