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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tomoki10
January 17, 2025
Technology
710
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を利用するためのプラクティス / team-claude-code-practices
tomoki10
7
5.1k
re:Invent2025 3つの Frontier Agents を紹介 / introducing-3-frontier-agents
tomoki10
0
1.1k
AWS Security Agentの紹介/introducing-aws-security-agent
tomoki10
0
1.4k
Kiro Autonomous AgentとKiro Powers の紹介 / kiro-autonomous-agent-and-powers
tomoki10
0
1.9k
CDK Vibe Coding Fes
tomoki10
1
1.1k
cdk initで生成されるあのファイル達は何なのか/cdk-init-generated-files
tomoki10
1
1.5k
Devin(Deep) Wiki/Searchの活用で変わる開発の世界観/devin-wiki-search-impact
tomoki10
1
4k
AI駆動で進化する開発プロセス ~クラスメソッドでの実践と成功事例~ / aidd-in-classmethod
tomoki10
2
5k
DevinはクラウドエンジニアAIになれるのか!? 実践的なガードレール設計/devin-can-become-a-cloud-engineer-ai-practical-guardrail-design
tomoki10
2
4.7k
Other Decks in Technology
See All in Technology
Databricks における 生成AIガバナンスの実践
taka_aki
1
310
AI Testing Talks: Challenges of Applying AI in Software Testing: From Hype to Practical Use
exactpro
PRO
1
130
正解のないAIプロダクトをどう導くか?dodaが挑む、ユーザーの『本音』を構造化する評価設計と検証のリアル
techtekt
PRO
0
180
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
460
サプライチェーンセキュリティの空白地帯 - 信頼できる”依存性”の未来を考える
rung
PRO
2
700
形式手法特論:公平性制約の位相的特徴づけ #kernelvm / Kernel VM Study Kansai 12th
ytaka23
1
750
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
190
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
180
新規ゲーム開発におけるAI駆動開発のリアル
202409e2
0
2.5k
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検証&解説
tabatad
1
850
ルールやカスタム機能、どう使う?理想の出力を引き出すために今知りたいIBM Bob 5つの機能
muehara
1
340
noUncheckedIndexedAccess、3時間、1万円。 / noUncheckedIndexedAccess, 3 Hours, 10,000 JPY.
kaonavi
1
300
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Are puppies a ranking factor?
jonoalderson
1
3.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
How to Ace a Technical Interview
jacobian
281
24k
The SEO identity crisis: Don't let AI make you average
varn
0
480
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
250
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
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