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

AWS CDK コンストラクトの分割戦略: レベル指向プラクティスの実践/AWS CDK Construct Partition Strategy: Implementing Level-Oriented Practice

AWS CDK コンストラクトの分割戦略: レベル指向プラクティスの実践/AWS CDK Construct Partition Strategy: Implementing Level-Oriented Practice

AWS CDK のコード分割手法にはコンストラクトを利用した手法があり、現在ではコンストラクトを利用した手法が一般的になりつつあります。更に言うと、このコンストラクトの分割戦略にも様々な手法があり、私はその中でも AWS CDK の L1 やL2 といったレベルを意識した分割戦略をよく利用します。この分割戦略を私は「レベル指向プラクティス」と呼んでおり、レベル指向プラクティスを採用することによるメリットとデメリット、及びその実践方法を紹介します。

想定聴講者: AWS CDK アプリケーション開発の経験が1年以上ある方、コンストラクト分割戦略に関心のある方

AWS CDK Conference Japan 2024で発表しました。https://jawsug-cdk.connpass.com/event/317921/

WinterYukky

July 08, 2024
Tweet

Other Decks in Technology

Transcript

  1. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. © 2023, Amazon Web Services, Inc. or its affiliates. AWS CDK コンストラクトの分割戦略 レベル指向プラクティス A W S C D K C O N F E R E N C E J A P A N 2 0 2 4 P R E S E N T E D B Y J A W S - U G Yukihiro Yoshikawa Amazon Web Services Japan G,K, Solutions Architect
  2. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. 今⽇お伝えしたいこと 2 コンストラクトの分割は Backend のようなサービス固有のコンストラクトを作るだけでな く、L2 / L3 コンストラクトを作ることでも分割できる。 対象視聴者 適切な⾔葉が⾒つからなかったため便宜上特定サービス⽤コンストラクトを L4 と呼称し ますが、厳密には L3 コンストラクトの⼀種です。あくまでも私のプラクティスであり、 ベストプラクティスではないことにご注意ください。 AWS CDK アプリケーション開発の経験が1年以上ある⽅、コンストラクト分割戦略に関⼼ のある⽅ 諸注意
  3. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. ⾃⼰紹介 3 吉川 幸弘 Twitter(X): @WinterYukky 概要 ⻄⽇本に⽣息するソリューションアーキテクト JAWS-UG CDK ⽀部を設⽴後、CDK 好きが収まらず勢い余って AWS へ⼊社。 好きな AWS サービス AWS Cloud Development Kit (CDK) Inferentia & Trainium
  4. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. ⽬次 1. CDK コードの分割⼿法について 1. コンストラクトで分割する⽂化になって変わった世��� 2. レベル指向プラクティス 1. レベル指向プラクティスのレベル概念 2. レベル指向プラクティスのメリット 3. コンストラクトライブラリ化 3. まとめ 4
  5. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. © 2023, Amazon Web Services, Inc. or its affiliates. コードの分割とコンストラクト 5
  6. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. 6 AWS CDK のコード分割 どうしていますか︖
  7. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. コード分割⼿法の⼀例 (組み合わせることもある) 7 分けていない ファクトリ関数を利⽤ コンストラクトを利⽤
  8. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. なぜコンストラクトで分割するの︖ 8 https://speakerdeck.com/tmokmss/answering-cdk-faqs?slide=14
  9. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. コンストラクトの分け⽅は⼤きく分けて2種類ありそう 9 リソースグループカット コンポーネントカット Database や Network などで 括っている場合 Backend やマイクロ サービスなどでコンス トラクトにする
  10. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. コンストラクトで分割する⽂化になってどう変わったか︖ 10 レベル概念に沿ってコンスト ラクト化することでこれらを 解決するのがこの資料の⽬的 解決された問題 • CDK の基本概念でのコード分割 • コンストラクト単位での Aspect 適応 • CFn コンソールでの TreeView 解決されていない問題 • 分け⽅の指針がない事による無秩序化 • コンストラクトの肥⼤化 • リファクタリングの誘惑 • リファクタリングのしにくさ • 再利⽤性のないコンストラクトの量産
  11. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. (再掲)コンストラクトの分け⽅は⼤きく分けて2種類 13 リソースグループカット コンポーネントカット どちらも L1/L2/L3 ではない 特定サービス⽤コンストラクト
  12. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. 特定サービス⽤コンストラクトについて 15 ecs-patterns のような L3 と区別するために このような特定サービス⽤のコンストラクトを この資料では便宜上 L4 コンストラクトと呼ぶ。 厳密には L3 コンストラクトに含まれる。 ※ 本来 L4 という概念はない
  13. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. 特定サービス⽤コンストラクトを含めた各レベルの特徴 16 レベル 再利⽤性 抽象化の恩恵 肥⼤化しにくさ L1 全ての基礎となるコンストラクト 再利⽤性は極めて⾼いと⾔える CloudFormation と同等なので抽 象化の恩恵は受けられない ロジックを持たないため肥⼤化 しない L2 多くの開発者が直接書く コンストラクト 再利⽤性は⾮常に⾼いと⾔える 単⼀サービスの利⽤に関して 抽象化を受けられる 特定のリソースにフォーカスす るため、リソース次第だが肥⼤ 化しにくい L3 特定のアーキテクチャパターンで 使うコンストラクト 再利⽤性は⽤途次第 特定のアーキテクチャパターン で多くの抽象化の恩恵を 受けられる L2 同⼠の組み合わせパターンな ら L2 に複雑さが凝縮するため肥 ⼤化しにくい L4 特定サービスのために作られるコン ストラクト 再利⽤性はあまりないと⾔える 具象性が求められるため抽象化 しない/できないことが多い 設計指針がないとコンストラク ト化が個⼈の裁量になるため 肥⼤化しやすい ※ 本来 L4 という概念はない
  14. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. © 2023, Amazon Web Services, Inc. or its affiliates. レベル指向プラクティス 17
  15. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. レベル指向プラクティスとは 18 特定サービス⽤コンストラクトを量産するのではなく L2/L3 コンストラクトを定義して分割するアプローチ 特定サービス⽤コンストラクトの肥⼤化や ナレッジの分散を回避できる
  16. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. よくあるコンストラクト分割 19 • そのままコンストラクト化する • スタックはコード量が減るが、 再利⽤できない L4 コンストラク トが⽣まれる • 含めるリソースの粒度も⼈に よって異なることに
  17. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. L2 コンストラクトを定義した場合 20 • 同じくスタック内コードの量が減る • 汎⽤的なコンストラクトになるため再利⽤可能 • IConnectable などで直感的に利⽤できるコンストラクトになる
  18. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. レベル指向プラクティスにおけるレベル概念 21 レベル 概要 設計指針 L1 ⾃動⽣成される コンストラクト ⾃動⽣成なので割愛 L2 特定リソースを簡単に利⽤できるようにする コンストラクト 特定リソースを定義することにフォーカス。 対象リソースは L1 を利⽤するが、IAM Role や Security Group などは L2 で利⽤する。 L3 特定アーキテクチャパターンを簡単に利⽤で きるコンストラクト 特定リソースの組み合わせにフォーカス。 基本的に複数の L2 コンストラクトを利⽤する。 L4 ※ 特定サービス向けコンストラクト サービスの実現にフォーカス。 基本的に複数の L2/L3 コンストラクトを利⽤し、 極⼒ L2+ のコンストラクトを使いたい ※ 本来 L4 という概念はない
  19. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. レベル指向プラクティスのメリット 23 • L4 コンストラクトが量産されにくい • リファクタリングの必要性が少なくなる • ⾃然と再利⽤性の⾼いコンストラクトライブラリを作れる • L4 コンストラクトが肥⼤化しにくい • Open Construct などへのコントリビュートに繋がる ※ 本来 L4 という概念はない
  20. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. L2 / L3 コンストラクトが CDK 本体にない場合 24 Open Construct を使う ⾃分で作る Construct Hub で探す
  21. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. 期待するコンストラクトライブラリの管理組織イメージ 25 レイヤー 管理することが期待される組織 L1 AWS L2 IAM などの他リソースから参照されるリソース ⇨ AWS Amazon Kendra などのリソース ⇨ コミュニティ L3 コミュニティ、CDK を利⽤する組織 L4 CDK を利⽤する組織 ※ 本来 L4 という概念はない
  22. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. (簡易) L2 コンストラクトの作りかた 27 • 特定リソースにフォーカスする • L2 によくある機能があるだけで最初は OK • L2 インターフェースの定義 • 物理名の決定 (CFn が⾃動⽣成しない場合) • IGrantable & grantXxx メソッドの実装 (grantXxxxメソッドで利⽤できるように) • IConnectable の実装 (xxx.connections.allowFromなどのメソッドが利⽤できるように) • その時必要なプロパティだけを Props で定義するといい • 複雑性を閉じ込めるので Fine-grained Assertions Test は必要 • Integ Test も可能なら実装したい
  23. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. L2/L3 コンストラクトのライブラリ化 28 フェーズ1 フェーズ2 フェーズ3 チーム内のみ利⽤ (オプション) 組織内で配布 OSS へ公開 利⽤するリポジトリ内で単な るコンストラクトとして管理 する。しばらく運⽤して最低 限安定するまで無理に公開し ない。 社内のパッケージレジストリ で配布する。この時点で後⽅ 互換性を意識する必要が出て くる。組織��再利⽤できるコ ンストラクトになっていく。 Open Construct などに PR を 送って公開する。コードを提 供する必要があるが組織の中 でメンテしきれない価値ある コンストラクトを継続メンテ できる。社会貢献にも繋がる。
  24. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. レベル指向プラクティスを適応する/しない場合 30 向いていると思われる領域 • IAM や Security Group を持つリソー ス • 複数回利⽤する組み合わせ • CDK の利⽤が複数チームで⾏われて いる組織 • CDK を使って調査をしている段階 向いていないと思われる領域 • 開発にかなりスピードが求められてい る状況 • CDK スキルが⾼いメンバーのいない状 態
  25. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. まとめ 31 • コンストラクトの分割部分は L4 だけで考えない • L4 コンストラクトだけ開発していると再利⽤性の低下を招く • L2/L3 コンストラクトによる分割も検討する • Open Construct なども利⽤して再実装の負荷を減らそう
  26. AWS CDK CONFERENCE JAPAN 2024 PRESENTED BY JAWS-UG © 2024,

    Amazon Web Services, Inc. or its affiliates. © 2023, Amazon Web Services, Inc. or its affiliates. Thank you!