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
20250708_JAWS_opscdk
Search
Takuya Yonezawa
July 08, 2025
Programming
280
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20250708_JAWS_opscdk
Takuya Yonezawa
July 08, 2025
More Decks by Takuya Yonezawa
See All by Takuya Yonezawa
20260516_SecJAWS_Days
takuyay0ne
5
910
20260422_Midosuji_Tech
takuyay0ne
2
96
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
610
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
750
20260204_Midosuji_Tech
takuyay0ne
1
260
20260129_CB_Kansai
takuyay0ne
1
390
20260126_JAWS_Osaka
takuyay0ne
1
71
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
4
830
セキュリティは全員参加!_JAWSのイベントサイトで脅威モデリングを学んでみよう!
takuyay0ne
0
230
Other Decks in Programming
See All in Programming
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
190
仕様駆動開発の消費期限
watany
20
9.2k
Oxlintはいいぞ(続)
yug1224
1
500
VibeCodingからAgenticWorkflowへ
starfish719
0
1k
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
130
初めての模倣学習とVLA
natsutan
0
370
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
270
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
190
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
220
業務時間外もAIに働いてもらう話
colorful12
3
9.4k
Press start. Python's next generation.
willingc
PRO
3
290
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
180
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Automating Front-end Workflow
addyosmani
1369
210k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
530
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
370
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
810
Facilitating Awesome Meetings
lara
57
7.1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Bash Introduction
62gerente
615
220k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
400
Transcript
1 © 2025 Japan Digital Design, Inc. Takuya Yo nezawa
2025.07.08 みんなで楽しくサステナブルに CDK開発するために Ops-JAWS Meetup #35
2 © 2025 Japan Digital Design, Inc. 米澤 拓也 Software
Engineer Technology & Development Div. and Corporate Culture室 プロフィール 米澤 前職ではCCoE、現職ではSoftware Engineer フロント/バックエンドの実装からインフラ構築など何でもやってます JAWSイベントのWEBサイト構築屋をやってましたが引退 Fin-JAWSの運営、CBはServerlessで2023年生 好きなAWSサービスは CloudFront、Lambda、CDK AWS資格0冠ですお手柔らかにお願いします
3 CONFIDENTIAL © 2025 Japan Digital Design, Inc. 4ヶ月くらいでCDKでこんだけリソースを作りました(主要部分のみピックアップ) Lambda
× 30 NodejsFunction × 6 PythonFunction × 24 SNS × 12 SQS × 10 ECS Service × 4 VPC × 1 DynamoDB × 9 S3 Bucket × 10 Step Functions × 6 Bedrock 他リソースも含めると、計450
4 © 2025 Japan Digital Design, Inc. CDKを業務利用し始めて約1年弱 品質向上のためのTipsを色々とご紹介
5 © 2025 Japan Digital Design, Inc. 本日投影するコードは全てこちらに https://github.com/takuya-yone/cdk-ops-sample
6 © 2025 Japan Digital Design, Inc. 01 Lambda on
CDKのテストコード
7 © 2025 Japan Digital Design, Inc. システムの根幹はLambda Lambdaのユニットテストから! 本発表ではCDK自体のテストは対象外です
(Assertion, Snapshot etc…)
8 © 2025 Japan Digital Design, Inc. 毎度おなじみの図 【出典】 https://pages.awscloud.com/rs/112-TZM-
766/images/DevAx_Connect_3rd_CICD_Test_20220609.pdf
9 © 2025 Japan Digital Design, Inc. ユニットテストの定義? “コードの最小機能ユニットを テストするプロセスです”
(※)コードの最小機能: 関数またはメソッド 【出典】 https://aws.amazon.com/jp/what-is/unit-testing/ テストコードを自動的に実行することで、 バグやエラー、予期せぬ挙動をするコードを素早く特定する
10 © 2025 Japan Digital Design, Inc. ユニットテストの定義? “コードの最小機能ユニットを テストするプロセスです”
(※)コードの最小機能: 関数またはメソッド E2EやIntegrationテストと比較して、 システム全体構成を理解する必要がない 意識するべき領域のスモール化 反復実行による即フィードバック ドキュメントとしての役割 ユニットテストの特性上、テスト実行が高速で回る 誤修正したらすぐに気付けるし、 どこが間違っているのかが明確に直ぐ分かる そして毎回AWS環境にデプロイして確認する必要もない 関数やメソッドがどのような動きをするのか? がテストコードを見ると分かる 他にも良いことが リファクタリングのキッカケに handlerが1個だけとかだと、テスト書いてて辛くなる → 自ずとメソッド・関数に切り出すことを意識するようになる (※)ただし、質の良いテストコード、テスト実施構成があるというのは大前提
11 © 2025 Japan Digital Design, Inc. 例えばこんなLambda SQS Lambda
外部API ① SQSのメッセージ数 をチェック ② メッセージ受信 (わざマシンID) ③ わざマシン情報を 取得 ④ <Return> ・わざ名(英語) ・タイムスタンプ Client Layer
12 © 2025 Japan Digital Design, Inc. ユニットテスト実装する際に気になること SQS Lambda
外部API Client Layer 実SQSにPublish・Recieveする? ・テスト実行のタイミングが 他の人と被ったら? ・イマイチなテスト実行で AWS利用料跳ねない? 毎回HTTPS通信走らせる? ・外部APIがメンテ中だったら? ・テスト回しすぎてブロックされたら?
13 © 2025 Japan Digital Design, Inc. ユニットテスト実装する際に気になること SQS Lambda
外部API Client Layer モック化 モック化 LocalStackは使いません AWS APIの向き先変える設定入れるの面倒くさいし、 Docker Compose書くのも面倒だし、 ライセンスの話とか考えたくない
14 © 2025 Japan Digital Design, Inc. AWSのコントロールプレーンのモック化ライブラリ aws-sdk-client-mock aws-sdk-client-mock-jest
https://github.com/takuya-yone/cdk-ops-sample /blob/main/tests/lambda/recieve-sqs-message.test.ts import周りは省略 get-queue-attributesコマンド 発行時のダミーレスポンス定義 → キュー内にメッセージが1件 receive-messageコマンド 発行時のダミーレスポンス定義 → ダミーのSQSメッセージを返す Lambdaのハンドラー実行+チェック
15 © 2025 Japan Digital Design, Inc. AWSのコントロールプレーンのモック化ライブラリ moto pytest
https://github.com/takuya-yone/cdk-ops-sample/ blob/main/tests/conftest.py conftest.pyに、pytest実行時に利用する fixtureを事前定義しておく - SQSのboto3クライアント(ダミー) - SQSキューの作成 - テスト時ダミー環境変数設定 - ダミーメッセージ1件の仕込み fixture:日本語訳は”治具”、テスト実行時に仕込む処理 conftest.py:fixtureをまとめて記載する。 pytest実行時に自動的にインポートされる 階層構造的に複数定義することもできる import周りは省略
16 © 2025 Japan Digital Design, Inc. AWSのコントロールプレーンのモック化ライブラリ https://github.com/takuya-yone/cdk-ops-sample/blob/main/tests/lambda/test_recieve_sqs_message.py テスト実行時に呼び出すfixtureを
引数に設定(自動的に呼ばれる) Lambdaのハンドラー実行+チェック lambdaのハンドラーをインポート (このタイミングでやらないと環境変数周りでエラーを食らう) moto pytest
17 © 2025 Japan Digital Design, Inc. 単純な1ファイルLambdaならこれでいい! Lambda Layerとか挟んでいるとケアが必要に。。
18 © 2025 Japan Digital Design, Inc. サンプルプロジェクトのCDK構成 Nodejs、Python用にLambda Layerを定義
(中身はタイムスタンプを返却する関数)
19 © 2025 Japan Digital Design, Inc. サンプルプロジェクトのCDK構成 Nodejs、Python用にLambda Layerを定義
(中身はタイムスタンプを返却する関数)
20 © 2025 Japan Digital Design, Inc. サンプルプロジェクトのCDK構成 Nodejs、PythonのLambda本体定義 (CustomXxxFunctionは後述)
21 © 2025 Japan Digital Design, Inc. サンプルプロジェクトのCDK構成 Nodejs、PythonのHandlerから Layer内メソッドをインポート
AWS環境にLambdaをデプロイすると 問題なく動くがローカルでテスト回すと。。
22 © 2025 Japan Digital Design, Inc. サンプルプロジェクトのCDK構成 pnpm ts:test
pnpm py:test
23 © 2025 Japan Digital Design, Inc. サンプルプロジェクトのCDK構成 pnpm ts:test
pnpm py:test Lambdaデプロイ時のモジュール空間設計に 合わせるとローカルで参照エラー (テストできない、ビルドもできない)
24 © 2025 Japan Digital Design, Inc. CDK構成でのImport Error解消 tsconfig.json
jest.config.js CDK Synth(Deploy)だけ通すのであればtsconfig.jsonのみの修正でOK Jestからもtsconfig.jsonのpathsを読むには仕込みが必要 参照
25 © 2025 Japan Digital Design, Inc. CDK構成でのImport Error解消(パターン1) index.py
Lambda Layer仕様のpath importで失敗したら ローカル実行仕様のpathでimportを試みる イケてない!! (泣)
26 © 2025 Japan Digital Design, Inc. index.py テストコードの中でPythonモジュールの参照先を張り替える (ただし、エディタ上でのコードジャンプ機能は動かなくなる。。)
test_recieve_sqs_message.py CDK構成でのImport Error解消(パターン2) import先の上書き
27 © 2025 Japan Digital Design, Inc. その他 ユニットテスト全般のTips Pythonが絡むディレクトリ・ファイルは
スネークケース命名にしておく タイムスタンプ取得や外部APIを使う部分は 関数化しておくとモック化が楽
28 © 2025 Japan Digital Design, Inc. さあ、これで「テスト書いてない」 とか言えなくなりましたね?? 今すぐテストを書くのです。。
29 © 2025 Japan Digital Design, Inc. 02 時代は “Beyond
shift-left” ??
30 © 2025 Japan Digital Design, Inc. 先月re:Inforceに参加しました (Noteも書きました) https://note.com/japan_d2/n/n9255fa3d5230
31 © 2025 Japan Digital Design, Inc. https://www.youtube.com/watch?v=Ti1iyncONCM
32 © 2025 Japan Digital Design, Inc. 例えばこんなケース CDK修正のPR出しました! 確認お願いします!
この部分xxx要件満たせてないから 再修正してください そんな記載どこに。。 先に言っといてくれよ!怒 再度CDKの修正PRを(ry (続く) コンプラの番人 フッ軽デベロッパー (※)これはフィクションです
33 © 2025 Japan Digital Design, Inc. 例えばこんなケース CDK修正のPR出しました! 確認お願いします!
この部分xxx要件満たせてないから 再修正してください そんな記載どこに。。 先に言っといてくれよ! 再度CDKの修正PRを(ry (続く) コンプラの番人 フッ軽デベロッパー (※)これはフィクションです Compliance as Code (Policy as Code) コンプライアンス要件をコード化して 開発サイクルに組み込む 作り上げたコードは組織の資産に
34 © 2025 Japan Digital Design, Inc. CDK Aspects CDKで定義された各種リソースを
一括操作するための仕組み リソースの既存プロパティを 上書きもできるが乱用は危険。。 readのみに留めておきましょう 下記もAspectsを利用している - Tags.of - cdk-nag lib/aspects/policy.ts lib/aspects/vpc.ts Public Subnet 禁止! CDKで実現するなら。。 ルール定義を追加していけば まとめてチェック可能 (Visitor Design)
35 © 2025 Japan Digital Design, Inc. CDK Aspects CDKで定義された各種リソースを
一括操作するための仕組み リソースの既存プロパティを 上書きもできるが乱用は危険。。 readのみに留めておきましょう 下記もAspectsを利用している - Tags.of - cdk-nag CDKで実現するなら。。 lib/aspects/vpc.ts 問題の部分 cdk synth
36 © 2025 Japan Digital Design, Inc. CloudFormation Guard DSLを書くことでCFnテンプレートの
ポリシーチェックを実行できる cfn-guardコマンドを使えばローカル 環境で、チェック実行できる CFn hookと組み合わせれば、AWS環 境へのCFnスタックデプロイ・更新時 にチェック実行できる bucket-versioning/template.yml CDKで実現するなら。。 bucket-versioning/bucket-versioning.guard リソースの期待する状態を CFnテンプレートとして記載 (バケットのバージョニングOn) cfn-guard rulegen
37 © 2025 Japan Digital Design, Inc. lintで特定リソースの利用を ブロック 要件遵守であったり、メンテ性向上を
目的とした独自リソース定義の 利用を強制させたいケース lintの静的解析で特定パターンが 出現していたらFailさせる CDKで実現するなら。。 lib/custom-resource/CustomNodejsFunction.ts runtimeやlogGroupといった特定のプロパティを プリセットしておいたリソースクラス
38 © 2025 Japan Digital Design, Inc. lintで特定リソースの利用を ブロック 要件遵守であったり、メンテ性向上を
目的とした独自リソース定義の 利用を強制させたいケース lintの静的解析で特定パターンが 出現していたらFailさせる CDKで実現するなら。。 lib/constructs/lambda.ts 事前定義クラスを呼び出して リソース作成している OK NodejsFunctionクラスを 直呼び出してリソース作成している ブロックしたい
39 © 2025 Japan Digital Design, Inc. lintで特定リソースの利用を ブロック 要件遵守であったり、メンテ性向上を
目的とした独自リソース定義の 利用を強制させたいケース lintの静的解析で特定パターンが 出現していたらFailさせる CDKで実現するなら。。 biome.json エラーにするimportパターンと エラー時のメッセージを定義 (※)biomeの例を出してますが、ESLintでも出来る CLIでlint実行 想定通りFail
40 © 2025 Japan Digital Design, Inc. 03 まとめ
41 © 2025 Japan Digital Design, Inc. 快適な開発環境(楽園)と治安は 自分達で作り、守っていくのだ!!
Thank you. 42 © 2025 Japan Digital Design, Inc.