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
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-m...
Search
tomoki10
January 17, 2025
Technology
810
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
クラスメソッドのAWS CDK事情大公開スペシャル#2での登壇資料です。
https://classmethod.connpass.com/event/337711/
tomoki10
January 17, 2025
More Decks by tomoki10
See All by tomoki10
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
1.1k
チームで安全にClaude Codeを利用するためのプラクティス / team-claude-code-practices
tomoki10
7
5.5k
re:Invent2025 3つの Frontier Agents を紹介 / introducing-3-frontier-agents
tomoki10
0
1.3k
AWS Security Agentの紹介/introducing-aws-security-agent
tomoki10
0
1.8k
Kiro Autonomous AgentとKiro Powers の紹介 / kiro-autonomous-agent-and-powers
tomoki10
0
2.1k
CDK Vibe Coding Fes
tomoki10
1
1.1k
cdk initで生成されるあのファイル達は何なのか/cdk-init-generated-files
tomoki10
1
1.7k
Devin(Deep) Wiki/Searchの活用で変わる開発の世界観/devin-wiki-search-impact
tomoki10
1
4.2k
AI駆動で進化する開発プロセス ~クラスメソッドでの実践と成功事例~ / aidd-in-classmethod
tomoki10
2
5.4k
Other Decks in Technology
See All in Technology
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
110
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
0
190
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
2
2.8k
AIで仕事のやり方を変える
matsu7874
2
980
omasushiというライブラリを作った
polidog
PRO
0
140
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
3
1k
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
900
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
240
生成AI時代の クレデンシャルとパーミッション設計
nrinetcom
PRO
4
1.6k
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.7k
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
360
V8コントリビュート超入門
riyaamemiya
0
150
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Producing Creativity
orderedlist
PRO
348
41k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Abbi's Birthday
coloredviolet
3
9.8k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
650
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
510
A better future with KSS
kneath
240
18k
Typedesign – Prime Four
hannesfritz
42
3.2k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Transcript
CDKのコードレビューを楽にするパッケージ cdk-mentorを作ってみた 2025/01/17 製造ビジネステクノロジー部 佐藤智樹
CDKのコードレビューって何やってます? 参考のため是⾮ポストしてください!! #cm_cdk_special 2
• 佐藤智樹 • 製造ビジネステクノロジー部 • アーキテクトチーム • JAWS-UG CDK⽀部 運営
• 好きなもの:孤独のグルメ • 好きなAWSサービス↓ ⾃⼰紹介 3 @tmk2154 @tomoki10 @tomoki10 Lambda CDK
• CDKのコードレビュー ◦ インフラ設定 ◦ セキュリティ設定 ◦ CDK/CloudFormationの構造 • cdk-mentorの紹介
◦ 機能紹介 ◦ デモ • 実装の中⾝を紹介 ◦ CDKのAspectsとは ◦ cdk-mentorの機能 ⽬次 4
ライフサイクルの早い段階でバグなどを取り除くことで、影響を最⼩限に抑える ただレビューは結構⼤変なのでなるべく静的コード解析に任せたい コードレビューの重要性 5 https://gihyo.jp/dev/serial/01/code_dev_cycle/0001
• インフラ設計(機能⾯、⾮機能⾯) ◦ インフラの構成が問題ないか ▪ ⼈⼿でレビュー (今ならAIレビュー?) ◦ パラメータの設定が社内ルールなどに準拠しているか ▪
Aspectsを使ったテスト(Fine-grained Assertions Test)で対応可能 • セキュリティ設計 ◦ AWSのセキュリティ基準や社内ルールなどに準拠しているか ▪ ⼈⼿でのレビュー ▪ cdk-nagを使ったリソース全体の⾃動チェック(要⼿動での除外設定) ▪ デプロイ後のSecurity Hubなどによる指摘修正 CDKのコードレビューの要素 6
• CDK/CloudFormationの構造に関わる部分のレビュー ◦ クロススタック参照/ネストスタック参照などを利⽤していないか ▪ ネイティブの参照機能(strong stack reference)を使っていないか ▪ 注意点を理解しているか
◦ Construct IDがPascalCaseになっているか ◦ Construct IDにConstructやStackなどの名前が含まれないか ▪ 物理リソース名が冗⻑にならないようチェック ◦ カスタムリソースを使っていないか ▪ 内部でカスタムリソースを使うような実装になっていないか CDKのコードレビューの要素 7
参考情報 8 https://dev.classmethod.jp/articles/aws-cdk-props-cross-stack-referen ce-problem-and-handle/ https://dev.classmethod.jp/articles/best-way-to-name-aws-cdk-construct -id/
• CDK/CloudFormationの構造に関わる部分のレビュー ◦ クロススタック参照/ネストスタック参照などを利⽤していないか ▪ ネイティブの参照機能(strict stack reference)を使っていないか ▪ 注意点を理解しているか
◦ Construct IDがPascal Caseになっているか ◦ Construct IDにConstructやStackなどの名前が含まれないか ▪ 物理リソース名が冗⻑にならないようチェック ◦ カスタムリソースを使っていないか ▪ 内部でカスタムリソースを使うような実装になっていないか CDKのコードレビューの要素 9
https://github.com/tomoki10/cdk-mentor cdk-mentor 10
デモ 11
デモ動画 12
例えばスコープを左のStackにすれば、 左のStack配下のConstructに同じ操作を ⾏うことが可能。 以下のコード場合は、Appがスコープ • CDKのAspectsとは ◦ 特定のスコープ(StackやAppなど)のConstructに対して、共通の操作を⾏える機能 中⾝の紹介の前におさらい 13
https://aws.amazon.com/jp/blogs/aws/boost-your-infrastructure-with-cdk/
CloudFormation経由でデプロイされるまでに4つのフェーズがあり PrepareのフェーズでAspectsのvisitが実⾏される CDKでリソースがデプロイされるまでの流れ 14 https://aws.amazon.com/jp/blogs/devops/align-with-best-practices-while-creating-infrastructure-using-cdk-aspects/
cdk-nag:Aspectsを利⽤して、CDKが⽣成したAWSリソース⽤の オブジェクトを精査しセキュリティ基準に合うのかチェックする Aspectsの主な利⽤例 15 https://github.com/cdklabs/cdk-nag
cdk.IAspects インターフェースからクラスを実装してvisitを実⾏ cdk-mentorの実装⽅法 16 CloudFormationテンプレートにaws:cdk:pathとして出⼒される NodeのPath構造からConstruct IDを抽出
Constructに指定するIDがPascalCaseでなければエラーとする cdk-mentorの機能(Construct IDがPascalCaseかチェック) 17
Constructに指定するIDにConstruct|Stackという⽂字を⼊れない cdk-mentorの機能(Construct IDにConstruct|Stackを⼊れない) 18
未然に事故を防ぐため、CDKがデフォルトで提供するprops渡しのクロスス タック参照(※strong stack reference)を使った場合に警告を出す cdk-mentorの機能(クロススタック参照で警告) 19 ※参考:https://github.com/aws/aws-cdk/pull/22008
内部実装はTypeScriptですが、jssiによる変換でPythonでも使えます cdk-mentorの機能(python対応) 20 appファイル stackファイル
• CDKのL2/L3が⽣成するConstructIDがPascalCase出ない場合もある ◦ APIGateway(v1/v2) ◦ VPC(ElasticIP, InternetGateway, SecurityGroupIngress/Egress) ◦ Cognito(Role)
◦ AppConfig etc… おまけ:実装で苦労した(している)点 21 …
おまけ:実装で苦労した(している)点 22 • 対処⽅法 ◦ GAしている全L2 ConstructをSynthできるコードを書いて検査 ▪ Readmeのサンプルレベルのリソースを⽣成して確認 ◦
AWSリソースやパスのprefix、特定のAWSリソースで特定の名前の場合は除外 • おまけ情報 ◦ 現状AWSリソースでL2がGAしてるのは⼤体80~90ぐらいっぽい https://github.com/tomoki10/cdk-mentor/blob/main/src/excluded-resource-types.ts
出来そうなこと(未検証) • 特定のAWSリソースで、特定の命名規則を適⽤する ◦ ex: DynamoDBのテーブル名はUPPER_SNAKE_CASEとする ◦ ex: DynamoDBのGSI名はUPPER_SNAKE_CASEとする •
L2Constructがある場合、L1 Constructの利⽤でアラートを出す • コスト最適化のため、特定のインスタンスタイプを推奨 • バックアップ設定の確認 • 特定サービスの組み合わせを強制(LambdaにDLQを設定) 考えられる今後の拡張 23
None