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

リリースノートにないCDKのアップデートを見てみよう

 リリースノートにないCDKのアップデートを見てみよう

AWS CDK Conference Japan 2023 にてお話しした内容になります。
「リリースノートにないCDKのアップデートを見てみよう」
https://jawsug-cdk.connpass.com/event/278205/

watany

May 20, 2023
Tweet

More Decks by watany

Other Decks in Technology

Transcript

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

    View Slide

  2. AWS CDK クイズの時間です
    2

    View Slide

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

    View Slide

  4. A1.
    4

    View Slide

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

    View Slide

  6. A2.
    6

    View Slide

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

    View Slide

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

    View Slide

  9. About me
    Watanabe Yohei (Twitter: [email protected])
    :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

    View Slide

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

    View Slide

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

    View Slide

  12. 英語が苦手な人向け
    12

    View Slide

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

    View Slide

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

    "CDK の Chore での PR を見てみよう"
    14

    View Slide

  15. chore is 何
    15

    View Slide

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

    View Slide

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

    View Slide

  18. CDK における chore の具体例
    18

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. 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

    View Slide

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

    View Slide

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

    View Slide

  37. CDK には ”Snapshot Testing” がある
    37

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. Thank You!
    46

    View Slide