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
150
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若槻龍太
Amazon Managed Grafana で AWS IoT TwinMaker によるデジタルツインアプリケーションを動かしてみた
wakatsuki
0
140
社内でのサーバーレスアプリケーション開発を、プラットフォームエンジニアリングを整備して 迅速化・安定化させる取り組み
wakatsuki
0
3.3k
Matterport を使ってクラスメソッド各拠点のバーチャルオフィスツアーを作成してみた
wakatsuki
0
460
ブログを書く際に 意識していることや工夫していること (公開版)
wakatsuki
1
480
AWS IoT FleetWise のアップデートについて
wakatsuki
0
520
フレームワークから考える AWS IoT TwinMaker とデジタルツインの What と How
wakatsuki
0
790
5分で分かる AWS IoT TwinMaker とデジタルツイン
wakatsuki
0
880
AWS IoT TwinMakerとはどんなサービスなのか。その魅力について語ります
wakatsuki
0
1.2k
AWS CDK on CI/CD パイプライン
wakatsuki
0
1.6k
Featured
See All Featured
Unsuck your backbone
ammeep
668
57k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
290
Git: the NoSQL Database
bkeepers
PRO
425
64k
Statistics for Hackers
jakevdp
796
220k
Agile that works and the tools we love
rasmusluckow
327
21k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
3
370
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Navigating Team Friction
lara
183
14k
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