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
260
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
4
710
20260422_Midosuji_Tech
takuyay0ne
2
69
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
540
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
700
20260204_Midosuji_Tech
takuyay0ne
1
230
20260129_CB_Kansai
takuyay0ne
1
360
20260126_JAWS_Osaka
takuyay0ne
1
60
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
4
800
セキュリティは全員参加!_JAWSのイベントサイトで脅威モデリングを学んでみよう!
takuyay0ne
0
220
Other Decks in Programming
See All in Programming
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
6
1.2k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
130
スマートグラスで並列バイブコーディング
hyshu
0
140
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
250
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
240
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
11
4.2k
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
190
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
120
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
160
New "Type" system on PicoRuby
pocke
1
930
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
So, you think you're a good person
axbom
PRO
2
2.1k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
270
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
420
Evolving SEO for Evolving Search Engines
ryanjones
0
220
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
590
HDC tutorial
michielstock
2
710
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
4 Signs Your Business is Dying
shpigford
187
22k
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.