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
680
20260422_Midosuji_Tech
takuyay0ne
2
63
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
540
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
690
20260204_Midosuji_Tech
takuyay0ne
1
230
20260129_CB_Kansai
takuyay0ne
1
360
20260126_JAWS_Osaka
takuyay0ne
1
60
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
4
780
セキュリティは全員参加!_JAWSのイベントサイトで脅威モデリングを学んでみよう!
takuyay0ne
0
200
Other Decks in Programming
See All in Programming
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
280
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
140
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
500
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
550
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
770
さぁV100、メモリをお食べ・・・
nilpe
0
130
Swiftのレキシカルスコープ管理
kntkymt
0
210
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
300
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
730
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
220
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
4.5k
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
170
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
160
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Bash Introduction
62gerente
615
210k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Building Adaptive Systems
keathley
44
3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Fireside Chat
paigeccino
42
3.9k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
The browser strikes back
jonoalderson
0
1.1k
Paper Plane
katiecoart
PRO
1
51k
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.