Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS CDK の設計では Construct の構造も意識しよう!
Search
CM若槻龍太
November 01, 2024
1
1.5k
AWS CDK の設計では Construct の構造も意識しよう!
2024/11/01 に開催された「クラスメソッドのCDK事情大公開スペシャル#1」の登壇資料です。
https://classmethod.connpass.com/event/332020/
CM若槻龍太
November 01, 2024
Tweet
Share
More Decks by CM若槻龍太
See All by CM若槻龍太
イベント「10 周年を迎えた AWS IoT Core – 過去を振り返り、未来を見据えて」JAWS-UG IoT 専門支部 登壇資料
wakatsuki
0
20
Amazon Managed Grafana で AWS IoT TwinMaker によるデジタルツインアプリケーションを動かしてみた
wakatsuki
1
490
社内でのサーバーレスアプリケーション開発を、プラットフォームエンジニアリングを整備して 迅速化・安定化させる取り組み
wakatsuki
0
4.1k
Matterport を使ってクラスメソッド各拠点のバーチャルオフィスツアーを作成してみた
wakatsuki
0
890
ブログを書く際に 意識していることや工夫していること (公開版)
wakatsuki
1
600
AWS IoT FleetWise のアップデートについて
wakatsuki
0
700
フレームワークから考える AWS IoT TwinMaker とデジタルツインの What と How
wakatsuki
0
1k
5分で分かる AWS IoT TwinMaker とデジタルツイン
wakatsuki
1
1.2k
AWS IoT TwinMakerとはどんなサービスなのか。その魅力について語ります
wakatsuki
0
1.5k
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Code Reviewing Like a Champion
maltzj
526
40k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Making Projects Easy
brettharned
120
6.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
900
Transcript
若槻⿓太 クラスメソッド株式会社 AWS CDK の設計では Construct の構造も意識しよう!
⾃⼰紹介 2 • 若槻⿓太 • 2019年11⽉クラスメソッド⼊社 • 製造ビジネステクノロジー部 所属 •
主な業務 ◦ 各種アプリケーション開発 ◦ プラットフォームエンジニアリング ◦ 投資領域(デジタルツインなど) • 2024 Japan AWS Top Engineers 選出 • 2024 AWS Community Builders 選出 https://dev.classmethod.jp/author/wakatsuki-ryuta/
AWS CDK で管理しているリソースの情報を マネジメントコンソールから確認したい 3
サービスページのリソース⼀覧から⽬当てのリソースを探す 4
サービスページのリソース⼀覧から⽬当てのリソースを探す 5 ⾟いポイント • リソース名 が CDK で⾃動⽣成され ている •
⼿動での命名でも⻑い似たような 名前になりがち • すべての Cfn スタックのリソースが 表⽰される
どうすれば認知負荷を下げられるか? 6
CloudFormation のツリービューを利⽤する 7
CloudFormation のツリービューを利⽤する 8 ⽬当てのリソースの論理 ID までツ リーを展開し、対応する物理 ID から リソースページに直接アクセスする
CloudFormation のツリービューを利⽤する 9 ⽬当てのリソースの論理 ID までツ リーを展開し、対応する物理 ID から リソースページに直接アクセスする
サービスページから直接リソースを探すよりも良さそう!
CloudFormation のツリービューを利⽤する 10 このリソースのツリー構造は、CDK ではコ ンストラクト構造の作り⽅で決まる
どのようなコンストラクト構造で作るべきか? 11
どのようなコンストラクト構造で作るべきか? 12 https://speakerdeck.com/winteryukky/aws-cdk-construct-partition-strategy-implementing-level-oriented-practice?slide=9 WinterYukky「AWS CDK コンストラクトの分割戦略: レベル指向プラクティス」
どのようなコンストラクト構造で作るべきか? 13 • リソースグループカット ◦ リソース種類単位でのコンストラクト分割 • コンポーネントカット ◦ サービス単位でのコンストラクト分割
例えば、このようなサーバーレスシステムを CDK で構築したい 14
リソース種類単位でコンストラクトを分割する 15 • リソースグループカット ◦ リソース種類単位でのコンストラクト分割 • コンポーネントカット ◦ サービス単位でのコンストラクト分割
こちらを使って やってみる
リソース種類単位でコンストラクトを分割する 16
リソース種類単位でコンストラクトを分割する 17 DynamoDB
リソース種類単位でコンストラクトを分割する 18 Lambda
リソース種類単位でコンストラクトを分割する 19 API Gateway
リソース種類単位でコンストラクトを分割する 20 EventBridge
リソース種類単位でコンストラクトを分割する 21 ⼀⾒良さそうだが、本当にこれで良いのか?
ユースケースを考える:Lambda 関数のログを参照したい 22 500エラーが返る API Function の ログを調査したい
スタック内に Lambda 関数が多数あると... 23
スタック内に Lambda 関数が多数あると... 24 どれが⽬当ての Lambda 関数なんだっけ?
スタック内に Lambda 関数が多数あると... 25 どれが⽬当ての Lambda 関数なんだっけ? やはり⾟さがある...
2つの分割⽅法を組み合わせる 26 • リソースグループカット ◦ リソース種類単位でのコンストラクト分割 • コンポーネントカット ◦ サービス単位でのコンストラクト分割
両⽅を組み合わせ て使ってみたらど うか
2つの分割⽅法を組み合わせる 27
2つの分割⽅法を組み合わせる 28 • リソースグループカット ◦ リソース種類単位でのコンストラクト ▪ 複数のサービスから依存されうるリソース • データベース、ユーザーディレクトリ、ネットワークなど
• コンポーネントカット ◦ サービス単位でのコンストラクト ▪ ある⼀連の処理を実現する⽬的にのみ使⽤される同期的に動作するリソース群 • 複数のサービスが依存するリソースは含まない • ⼀時テーブルやクエリ⽤インデックスは含んでもよいかも
2つの分割⽅法を組み合わせる 29 HogeAPI Service
2つの分割⽅法を組み合わせる 30 FugaBatch Service
2つの分割⽅法を組み合わせる 31 DynamoDB Resource
2つの分割⽅法を組み合わせる 32
2つの分割⽅法を組み合わせる 33 DynamoDB Resource
2つの分割⽅法を組み合わせる 34 HogeAPI Service
2つの分割⽅法を組み合わせる 35 FugaBatch Service
ユースケースを考える:Lambda 関数のログを参照したい 36 500エラーが返る API Function の ログを調査したい
ユースケースを考える:Lambda 関数のログを参照したい 37
ユースケースを考える:Lambda 関数のログを参照したい 38 Service -> HogeAPI -> Function と展 開し、対応する物理
ID からリソース ページに直接アクセスする
ユースケースを考える:Lambda 関数のログを参照したい 39 ⼤きな認知負荷なくアクセスができる! Service -> HogeAPI -> Function と展
開し、対応する物理 ID からリソース ページに直接アクセスする
CDK のコード実装側も合わせて改善できる 40 ディレクトリ構造 スタックコード
CDK のコード実装側も合わせて改善できる 41 ディレクトリ構造 スタックコード 依存⽅向 依存⽅向 リソースの依存関係とサービスの境界が直感的になる!
• CloudFormation のツリービューを活⽤しよう • コンストラクト分割は、リソース種類単位とサービ ス単位を組み合わせて⾏うと良さげ • 上記を意識するとコンストラクト構造が直感的にな り、開発‧運⽤上の認知負荷を低減できる ◦
マネコンからのリソース探索時 ◦ CDK コードによる開発時 まとめ 42
None