Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cd...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for k.goto k.goto
July 17, 2026

AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch

2026/07/18 開催「AWS CDK Conference Japan 2026」での登壇資料です。

Avatar for k.goto

k.goto

July 17, 2026

More Decks by k.goto

Other Decks in Programming

Transcript

  1. 自己紹介 (k.goto) • 株式会社メイツ ‣ Chief Engineer • AWS Hero

    ‣ AWS DevTools Hero • AWS CDK コントリビューター ‣ Top Contributor ‣ Community Reviewer GitHub: @go-to-k X: @365̲step̲tech
  2. AWS CDK とは? CDK CLI ② CDKコマンド ⑥ デプロイ ⑤

    読み込み/ビルド ③ 合成(synth) ※サブプロセス ① CDK実装 クラウドアセンブリ (cdk.out) ④ 生成 CDK App
  3. CDK CLI の役割 • CDKコマンド ‣ cdk deploy, cdk synth,

    etc... • CDK App のオーケストレーター ‣ CDK App をサブプロセスで呼び出して合成を実行 ‣ CDK App の出力したクラウドアセンブリ(cdk.out)を読み込み+ビルド • CloudFormation のラッパー ‣ クラウドアセンブリ内の CloudFormation テンプレートを読み込んでデプロイ
  4. CDK App の役割 • ユーザーの実装した CDK コード ‣ aws-cdk-lib (ライブラリ)を使用

    • クラウドアセンブリを生成(=合成)するまでがゴール ‣ デプロイ処理には関与しない ‣ AWS アクセスをしない (context メソッド=fromLookup() でのアクセスは CDK CLI) • クラウドアセンブリ(cdk.out)の中身 fi ‣ CloudFormation テンプレート、Lambda ファイル、Docker le、etc...
  5. CloudFormation の役割 • 実際にデプロイ処理を行う CDK の要 ‣ CDK CLI が

    AWS SDK (CloudFormation) 実行 • 必要なアセットは CDK CLI がすでに AWS にビルド・アップロード済み ‣ アセット: Lambda ファイル、Docker イメージ、etc... ‣ CloudFormation テンプレートにそれらの情報などは埋め込み済み
  6. CDK と CloudFormation • CDK と CloudFormation は一心同体 ‣ 切っても切り離せない

    • CloudFormation が色々やってくれる分、制約もある ‣ デプロイ時間が長い(遅い)
  7. CDK と CloudFormation • CDK と CloudFormation は一心同体 ‣ 切っても切り離せない

    ‣ → 本当にそうなのか? • CloudFormation が色々やってくれる分、制約もある ‣ デプロイ時間が長い(遅い) ‣ → 切り離せれば、速度向上も可能になるのでは?
  8. CloudFormation の切り離しの検討 - CDK CLI / CDK App で完全に分離されている -

    サブプロセス実行・クラウドアセンブリが接点
  9. cdkd (CDK Direct) cdkd ② cdkdコマンド ⑥ デプロイ ⑤ 読み込み/ビルド

    ③ 合成(synth) ※サブプロセス ① CDK実装 クラウドアセンブリ (cdk.out) ④ 生成 CDK App AWS SDK (各サービス)
  10. cdkd (CDK Direct) cdkd ② cdkdコマンド ⑥ デプロイ ⑤ 読み込み/ビルド

    ③ 合成(synth) ※サブプロセス ① CDK実装 クラウドアセンブリ (cdk.out) AWS SDK (各サービス) ④ 生成 CDK App CloudFormation テンプレートは そのまま使用!
  11. cdkd (CDK Direct) 合成 (CDK App) CDK CLI の代替 クラウドアセンブリ解析

    アセット ビルド/公開 cdkd エンジン CloudFormation の代替 SDK プロバイダー サブプロセス実行 クラウドアセンブリ生成 CloudFormation テンプレートのパース (+ manifest) Zip 化 / S3 アップロード Docker イメージビルド / ECR push DAG (有向非巡回グラフ = 依存グラフ) 生成 di 計算 (既存リソースとの比較) 並列実行 (未完了依存 0 で即時ディスパッチ) CC API プロバイダー SDK: 爆速 (作成コスト有) CC API: 広範囲カバー (フォールバック) ff ※CC API: Cloud Control API
  12. 車輪の再発明 (CDK の裏側) • CDK CLI のやっていたこと • CloudFormation のやっていたこと

    ‣ con g (context) 読み込み ‣ CFn テンプレート解析 (+値解決) - 複数の con g / context 指定方法 ‣ 合成のオーケストレート - 未解決 context 存在時の合成ループ ‣ Context プロバイダー - AWS SDK による値取得 ‣ アセット管理 ff fi fi - Zip 化 / S3 アップロード - Docker ビルド / ECR push - 依存解決 (Ref/GetAtt) - 組み込み関数 (Fn::Sub/etc...) ‣ 状態管理 (状態=スタック) ‣ プロパティ/リソース単位の di 計算 ‣ 実行計画 (依存グラフ + レベル管理) ‣ リソースプロビジョニング (API 実行) ‣ ロールバック ‣ リソースの安定化待ち
  13. 車輪の再発明 (CDK の裏側) • CDK CLI のやっていたこと • CloudFormation のやっていたこと

    全て - 複数の con g / context 指定方法 - 依存解決 (Ref/GetAtt) - 組み込み関数 (Fn::Sub/etc...) ‣ 合成のオーケストレート 自作(フルスクラッチ) ‣ 状態管理 (状態=スタック) - 未解決 context 存在時の合成ループ プロパティ/リソース単位の di 計算 ‣ Context プロバイダー ‣ しました! 実行計画 (依存グラフ + レベル管理) - AWS SDK による値取得 ‣ con g (context) 読み込み ‣ CFn テンプレート解析 (+値解決) ff fi fi ‣ ※リソースの安定化待ち以外 ‣ アセット管理 ‣ リソースプロビジョニング (API 実行) →cdkd は速度重視のため - Zip 化 / S3 アップロード ‣ ロールバック - Docker ビルド / ECR push ‣ リソースの安定化待ち
  14. 車輪の再発明 (CDK の裏側) • CDK CLI のやっていたこと のやっていたこと • CloudFormation

    CDK の仕組みを知っていれば ‣ con g (context) 読み込み テンプレート解析 (+値解決) ‣ CFn 実装はそんなに難しくない - 複数の con g / context 指定方法 ‣ 合成のオーケストレート - 未解決 context 存在時の合成ループ ‣ Context プロバイダー - AWS SDK による値取得 ‣ アセット管理 ff fi fi - Zip 化 / S3 アップロード - Docker ビルド / ECR push - 依存解決 (Ref/GetAtt) 組み込み関数 (Fn::Sub/etc...) -CDK の仕組みを知ることで 普段の CDK(状態=スタック) 開発で遭遇した挙動も ‣ 状態管理 理解できるようになります! di 計算 ‣ プロパティ/リソース単位の ‣ 実行計画 (依存グラフ + レベル管理) ‣ リソースプロビジョニング (API 実行) ‣ ロールバック ‣ リソースの安定化待ち
  15. 車輪の再発明 (CDK の裏側) • CDK CLI のやっていたこと 特にこちらが大変でした con g

    (context) 読み込み ‣ (cdkd 自作 CloudFormation) 複数の con g / context 指定方法 - ‣ 合成のオーケストレート これらをマネージドでやってくれる - 未解決 context 存在時の合成ループ CloudFormation は偉大! ‣ Context プロバイダー - AWS SDK による値取得 ‣ アセット管理 ff fi fi - Zip 化 / S3 アップロード - Docker ビルド / ECR push • CloudFormation のやっていたこと ‣ CFn テンプレート解析 (+値解決) - 依存解決 (Ref/GetAtt) - 組み込み関数 (Fn::Sub/etc...) ‣ 状態管理 (状態=スタック) ‣ プロパティ/リソース単位の di 計算 ‣ 実行計画 (依存グラフ + レベル管理) ‣ リソースプロビジョニング (API 実行) ‣ ロールバック ‣ リソースの安定化待ち
  16. cdkd 独自の強み • 独自の最適化 (速度向上) ‣ --no-wait ( Express mode):

    CloudFront / RDS / ElastiCache / NAT Gateway ‣ VPC Lambda のプライベートサブネットのルート依存はがし • 未定義プロパティのドリフト検知 (cdk-real-drift に切り出し) • アプリコードのローカル実行 (cdk-local に切り出し) • CloudFormation との相互移行 ‣ cdkd export / import --migrate-from-cloudformation cdk-real-drift: https://github.com/go-to-k/cdk-real-drift cdk-local: https://github.com/go-to-k/cdk-local
  17. CDK CLI (CloudFormation) との速度比較 ※ 3 回計測の最速値 ※ Express: CloudFormation

    Express モード (2026/7~) CloudFormation の 最大 14 倍以上 Express モードの 最大 9 倍以上
  18. CloudFormation の良いところ • マネージドによる動作の提供・保証 ‣ 依存解決 / di 計算 /

    API 実行 / ロールバック ‣ 状態をユーザー側で持たなくていい • リソースの安定化待ち ‣ 安定化前にリソースにアクセスしてもエラーになることがある ‣ CloudFormation では「デプロイ完了 = 即使える」(速度とのトレードオフ) ff → 安心してデプロイできる・リソースを扱える (本番環境向き)
  19. cdkd のユースケース • cdkd は CDK CLI の置き換えではなく補完し合う立ち位置 ‣ 開発

    / テストは cdkd で開発イテレーションを高速に ‣ ステージング / 本番環境は CDK CLI (CloudFormation) • AI 駆動開発における使い捨て環境・プロトタイプ環境の構築 ‣ cdkd の爆速さが AI との相性◎ ‣ とにかく速く作って壊す!(cdkd は削除も爆速!) • 適宜 cdkd export / import で、cdkd <-> CFn の相互移行が可能
  20. cdk-local (cdkl) • CDK 管理のアプリコードをローカル実行する CLI ツール ‣ 関連リソース情報を AWS

    環境から自動取得も可能 - アプリはローカル実行しつつ、Secret / S3 / DB などは実リソースにアクセス - .env やローカルへのデータ同期などが不要に ‣ ブラウザ実行も可能 https://github.com/go-to-k/cdk-local
  21. cdk-real-drift (cdkrd) • CDK ドリフト検出ツール ‣ CDK (CloudFormation) で未定義プロパティのドリフト検出も可能 -

    cdk drift では検知不可のものが検出できる ‣ record / revert / ignore 可能 https://github.com/go-to-k/cdk-real-drift
  22. aws-cdk-unit-testing (Skill) • AWS CDK の単体テスト Skill ‣ AWS CDK

    における単体テストの実践的なノウハウを Coding Agent が理解 - どの場面でどんなテストを書くべきか / 書かなくて良いか - 判断フロー・コードパターン別の例・アンチパターン ‣ builders. ash 寄稿記事をスキル化 - 『AWS CDK における単体テストの使い所を学ぶ』 fl https://github.com/go-to-k/cdk-skills