CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
by
tomoki10
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
CDKのコードレビューを楽にするパッケージ cdk-mentorを作ってみた 2025/01/17 製造ビジネステクノロジー部 佐藤智樹
Slide 2
Slide 2 text
CDKのコードレビューって何やってます? 参考のため是⾮ポストしてください!! #cm_cdk_special 2
Slide 3
Slide 3 text
● 佐藤智樹 ● 製造ビジネステクノロジー部 ● アーキテクトチーム ● JAWS-UG CDK⽀部 運営 ● 好きなもの:孤独のグルメ ● 好きなAWSサービス↓ ⾃⼰紹介 3 @tmk2154 @tomoki10 @tomoki10 Lambda CDK
Slide 4
Slide 4 text
● CDKのコードレビュー ○ インフラ設定 ○ セキュリティ設定 ○ CDK/CloudFormationの構造 ● cdk-mentorの紹介 ○ 機能紹介 ○ デモ ● 実装の中⾝を紹介 ○ CDKのAspectsとは ○ cdk-mentorの機能 ⽬次 4
Slide 5
Slide 5 text
ライフサイクルの早い段階でバグなどを取り除くことで、影響を最⼩限に抑える ただレビューは結構⼤変なのでなるべく静的コード解析に任せたい コードレビューの重要性 5 https://gihyo.jp/dev/serial/01/code_dev_cycle/0001
Slide 6
Slide 6 text
● インフラ設計(機能⾯、⾮機能⾯) ○ インフラの構成が問題ないか ■ ⼈⼿でレビュー (今ならAIレビュー?) ○ パラメータの設定が社内ルールなどに準拠しているか ■ Aspectsを使ったテスト(Fine-grained Assertions Test)で対応可能 ● セキュリティ設計 ○ AWSのセキュリティ基準や社内ルールなどに準拠しているか ■ ⼈⼿でのレビュー ■ cdk-nagを使ったリソース全体の⾃動チェック(要⼿動での除外設定) ■ デプロイ後のSecurity Hubなどによる指摘修正 CDKのコードレビューの要素 6
Slide 7
Slide 7 text
● CDK/CloudFormationの構造に関わる部分のレビュー ○ クロススタック参照/ネストスタック参照などを利⽤していないか ■ ネイティブの参照機能(strong stack reference)を使っていないか ■ 注意点を理解しているか ○ Construct IDがPascalCaseになっているか ○ Construct IDにConstructやStackなどの名前が含まれないか ■ 物理リソース名が冗⻑にならないようチェック ○ カスタムリソースを使っていないか ■ 内部でカスタムリソースを使うような実装になっていないか CDKのコードレビューの要素 7
Slide 8
Slide 8 text
参考情報 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/
Slide 9
Slide 9 text
● CDK/CloudFormationの構造に関わる部分のレビュー ○ クロススタック参照/ネストスタック参照などを利⽤していないか ■ ネイティブの参照機能(strict stack reference)を使っていないか ■ 注意点を理解しているか ○ Construct IDがPascal Caseになっているか ○ Construct IDにConstructやStackなどの名前が含まれないか ■ 物理リソース名が冗⻑にならないようチェック ○ カスタムリソースを使っていないか ■ 内部でカスタムリソースを使うような実装になっていないか CDKのコードレビューの要素 9
Slide 10
Slide 10 text
https://github.com/tomoki10/cdk-mentor cdk-mentor 10
Slide 11
Slide 11 text
デモ 11
Slide 12
Slide 12 text
デモ動画 12
Slide 13
Slide 13 text
例えばスコープを左のStackにすれば、 左のStack配下のConstructに同じ操作を ⾏うことが可能。 以下のコード場合は、Appがスコープ ● CDKのAspectsとは ○ 特定のスコープ(StackやAppなど)のConstructに対して、共通の操作を⾏える機能 中⾝の紹介の前におさらい 13 https://aws.amazon.com/jp/blogs/aws/boost-your-infrastructure-with-cdk/
Slide 14
Slide 14 text
CloudFormation経由でデプロイされるまでに4つのフェーズがあり PrepareのフェーズでAspectsのvisitが実⾏される CDKでリソースがデプロイされるまでの流れ 14 https://aws.amazon.com/jp/blogs/devops/align-with-best-practices-while-creating-infrastructure-using-cdk-aspects/
Slide 15
Slide 15 text
cdk-nag:Aspectsを利⽤して、CDKが⽣成したAWSリソース⽤の オブジェクトを精査しセキュリティ基準に合うのかチェックする Aspectsの主な利⽤例 15 https://github.com/cdklabs/cdk-nag
Slide 16
Slide 16 text
cdk.IAspects インターフェースからクラスを実装してvisitを実⾏ cdk-mentorの実装⽅法 16 CloudFormationテンプレートにaws:cdk:pathとして出⼒される NodeのPath構造からConstruct IDを抽出
Slide 17
Slide 17 text
Constructに指定するIDがPascalCaseでなければエラーとする cdk-mentorの機能(Construct IDがPascalCaseかチェック) 17
Slide 18
Slide 18 text
Constructに指定するIDにConstruct|Stackという⽂字を⼊れない cdk-mentorの機能(Construct IDにConstruct|Stackを⼊れない) 18
Slide 19
Slide 19 text
未然に事故を防ぐため、CDKがデフォルトで提供するprops渡しのクロスス タック参照(※strong stack reference)を使った場合に警告を出す cdk-mentorの機能(クロススタック参照で警告) 19 ※参考:https://github.com/aws/aws-cdk/pull/22008
Slide 20
Slide 20 text
内部実装はTypeScriptですが、jssiによる変換でPythonでも使えます cdk-mentorの機能(python対応) 20 appファイル stackファイル
Slide 21
Slide 21 text
● CDKのL2/L3が⽣成するConstructIDがPascalCase出ない場合もある ○ APIGateway(v1/v2) ○ VPC(ElasticIP, InternetGateway, SecurityGroupIngress/Egress) ○ Cognito(Role) ○ AppConfig etc… おまけ:実装で苦労した(している)点 21 …
Slide 22
Slide 22 text
おまけ:実装で苦労した(している)点 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
Slide 23
Slide 23 text
出来そうなこと(未検証) ● 特定のAWSリソースで、特定の命名規則を適⽤する ○ ex: DynamoDBのテーブル名はUPPER_SNAKE_CASEとする ○ ex: DynamoDBのGSI名はUPPER_SNAKE_CASEとする ● L2Constructがある場合、L1 Constructの利⽤でアラートを出す ● コスト最適化のため、特定のインスタンスタイプを推奨 ● バックアップ設定の確認 ● 特定サービスの組み合わせを強制(LambdaにDLQを設定) 考えられる今後の拡張 23
Slide 24
Slide 24 text
No content