Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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年以上ある⽅、コンストラクト分割戦略に関⼼ のある⽅ 諸注意

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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 という概念はない

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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 という概念はない

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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 で探す

Slide 21

Slide 21 text

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 という概念はない

Slide 22

Slide 22 text

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 も可能なら実装したい

Slide 23

Slide 23 text

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 を 送って公開する。コードを提 供する必要があるが組織の中 でメンテしきれない価値ある コンストラクトを継続メンテ できる。社会貢献にも繋がる。

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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!