Slide 1

Slide 1 text

若槻⿓太 クラスメソッド株式会社 AWS CDK の設計では Construct の構造も意識しよう!

Slide 2

Slide 2 text

⾃⼰紹介 2 ● 若槻⿓太 ● 2019年11⽉クラスメソッド⼊社 ● 製造ビジネステクノロジー部 所属 ● 主な業務 ○ 各種アプリケーション開発 ○ プラットフォームエンジニアリング ○ 投資領域(デジタルツインなど) ● 2024 Japan AWS Top Engineers 選出 ● 2024 AWS Community Builders 選出 https://dev.classmethod.jp/author/wakatsuki-ryuta/

Slide 3

Slide 3 text

AWS CDK で管理しているリソースの情報を マネジメントコンソールから確認したい 3

Slide 4

Slide 4 text

サービスページのリソース⼀覧から⽬当てのリソースを探す 4

Slide 5

Slide 5 text

サービスページのリソース⼀覧から⽬当てのリソースを探す 5 ⾟いポイント ● リソース名 が CDK で⾃動⽣成され ている ● ⼿動での命名でも⻑い似たような 名前になりがち ● すべての Cfn スタックのリソースが 表⽰される

Slide 6

Slide 6 text

どうすれば認知負荷を下げられるか? 6

Slide 7

Slide 7 text

CloudFormation のツリービューを利⽤する 7

Slide 8

Slide 8 text

CloudFormation のツリービューを利⽤する 8 ⽬当てのリソースの論理 ID までツ リーを展開し、対応する物理 ID から リソースページに直接アクセスする

Slide 9

Slide 9 text

CloudFormation のツリービューを利⽤する 9 ⽬当てのリソースの論理 ID までツ リーを展開し、対応する物理 ID から リソースページに直接アクセスする サービスページから直接リソースを探すよりも良さそう!

Slide 10

Slide 10 text

CloudFormation のツリービューを利⽤する 10 このリソースのツリー構造は、CDK ではコ ンストラクト構造の作り⽅で決まる

Slide 11

Slide 11 text

どのようなコンストラクト構造で作るべきか? 11

Slide 12

Slide 12 text

どのようなコンストラクト構造で作るべきか? 12 https://speakerdeck.com/winteryukky/aws-cdk-construct-partition-strategy-implementing-level-oriented-practice?slide=9 WinterYukky「AWS CDK コンストラクトの分割戦略: レベル指向プラクティス」

Slide 13

Slide 13 text

どのようなコンストラクト構造で作るべきか? 13 ● リソースグループカット ○ リソース種類単位でのコンストラクト分割 ● コンポーネントカット ○ サービス単位でのコンストラクト分割

Slide 14

Slide 14 text

例えば、このようなサーバーレスシステムを CDK で構築したい 14

Slide 15

Slide 15 text

リソース種類単位でコンストラクトを分割する 15 ● リソースグループカット ○ リソース種類単位でのコンストラクト分割 ● コンポーネントカット ○ サービス単位でのコンストラクト分割 こちらを使って やってみる

Slide 16

Slide 16 text

リソース種類単位でコンストラクトを分割する 16

Slide 17

Slide 17 text

リソース種類単位でコンストラクトを分割する 17 DynamoDB

Slide 18

Slide 18 text

リソース種類単位でコンストラクトを分割する 18 Lambda

Slide 19

Slide 19 text

リソース種類単位でコンストラクトを分割する 19 API Gateway

Slide 20

Slide 20 text

リソース種類単位でコンストラクトを分割する 20 EventBridge

Slide 21

Slide 21 text

リソース種類単位でコンストラクトを分割する 21 ⼀⾒良さそうだが、本当にこれで良いのか?

Slide 22

Slide 22 text

ユースケースを考える:Lambda 関数のログを参照したい 22 500エラーが返る API Function の ログを調査したい

Slide 23

Slide 23 text

スタック内に Lambda 関数が多数あると... 23

Slide 24

Slide 24 text

スタック内に Lambda 関数が多数あると... 24 どれが⽬当ての Lambda 関数なんだっけ?

Slide 25

Slide 25 text

スタック内に Lambda 関数が多数あると... 25 どれが⽬当ての Lambda 関数なんだっけ? やはり⾟さがある...

Slide 26

Slide 26 text

2つの分割⽅法を組み合わせる 26 ● リソースグループカット ○ リソース種類単位でのコンストラクト分割 ● コンポーネントカット ○ サービス単位でのコンストラクト分割 両⽅を組み合わせ て使ってみたらど うか

Slide 27

Slide 27 text

2つの分割⽅法を組み合わせる 27

Slide 28

Slide 28 text

2つの分割⽅法を組み合わせる 28 ● リソースグループカット ○ リソース種類単位でのコンストラクト ■ 複数のサービスから依存されうるリソース ● データベース、ユーザーディレクトリ、ネットワークなど ● コンポーネントカット ○ サービス単位でのコンストラクト ■ ある⼀連の処理を実現する⽬的にのみ使⽤される同期的に動作するリソース群 ● 複数のサービスが依存するリソースは含まない ● ⼀時テーブルやクエリ⽤インデックスは含んでもよいかも

Slide 29

Slide 29 text

2つの分割⽅法を組み合わせる 29 HogeAPI Service

Slide 30

Slide 30 text

2つの分割⽅法を組み合わせる 30 FugaBatch Service

Slide 31

Slide 31 text

2つの分割⽅法を組み合わせる 31 DynamoDB Resource

Slide 32

Slide 32 text

2つの分割⽅法を組み合わせる 32

Slide 33

Slide 33 text

2つの分割⽅法を組み合わせる 33 DynamoDB Resource

Slide 34

Slide 34 text

2つの分割⽅法を組み合わせる 34 HogeAPI Service

Slide 35

Slide 35 text

2つの分割⽅法を組み合わせる 35 FugaBatch Service

Slide 36

Slide 36 text

ユースケースを考える:Lambda 関数のログを参照したい 36 500エラーが返る API Function の ログを調査したい

Slide 37

Slide 37 text

ユースケースを考える:Lambda 関数のログを参照したい 37

Slide 38

Slide 38 text

ユースケースを考える:Lambda 関数のログを参照したい 38 Service -> HogeAPI -> Function と展 開し、対応する物理 ID からリソース ページに直接アクセスする

Slide 39

Slide 39 text

ユースケースを考える:Lambda 関数のログを参照したい 39 ⼤きな認知負荷なくアクセスができる! Service -> HogeAPI -> Function と展 開し、対応する物理 ID からリソース ページに直接アクセスする

Slide 40

Slide 40 text

CDK のコード実装側も合わせて改善できる 40 ディレクトリ構造 スタックコード

Slide 41

Slide 41 text

CDK のコード実装側も合わせて改善できる 41 ディレクトリ構造 スタックコード 依存⽅向 依存⽅向 リソースの依存関係とサービスの境界が直感的になる!

Slide 42

Slide 42 text

● CloudFormation のツリービューを活⽤しよう ● コンストラクト分割は、リソース種類単位とサービ ス単位を組み合わせて⾏うと良さげ ● 上記を意識するとコンストラクト構造が直感的にな り、開発‧運⽤上の認知負荷を低減できる ○ マネコンからのリソース探索時 ○ CDK コードによる開発時 まとめ 42

Slide 43

Slide 43 text

No content