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

IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-j...

IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026

2026/06/25,26 開催 AWS Summit Japan 2026 の登壇資料です。

Avatar for k.goto

k.goto

June 26, 2026

More Decks by k.goto

Other Decks in Technology

Transcript

  1. Chief Engineer / 株式会社メイツ AWS Hero (AWS DevTools Hero) AWS

    CDK Top Contributor AWS CDK Community Reviewer 後藤 健太
  2. チーム規模 プロジェクト数 PJ: 3 + α (サブ PJ + SRE)

    (リポジトリ: 10 over) Backend: 5 名 (全 PJ 合計) - 3 名: 各 PJ 専任 - 2 名: PJ 横断 技術スタック AWS CloudFormation AWS Cloud Development Kit TypeScript / Go 当時のチーム・プロジェクトの構成 ※2024 年時点
  3. •似た構成のコードが各 PJ で散財・コピペ運用 ▸同じ役割のコードがプロジェクトごとに独立した管理対象として量産 •追加・変更を加えるたび全 PJ で個別対応 ▸同じ修正を何度も繰り返す → コストが

    PJ 数に比例して線形増加 •同じ役割なのに微妙に違う実装が並立し、認知負荷が肥大 ▸新規 PJ で「どれを真似すべきか」の判断が難しい 問題①:コードとしての非効率さ
  4. •知見・ノウハウが PJ 内に閉じてしまう ▸ある PJ で得たプラクティスが組織として活かされない •監視・運用のルールや仕組みが PJ ごとにバラバラ ▸品質管理

    / セキュリティなどを横断で担保する仕組みが弱い •AWS の新機能や共通改善の全社波及が遅い ▸各 PJ で個別に検討・実装する必要 → 組織としての追従速度が落ちる 問題②:組織としての非効率さ
  5. •各 PJ でよく使う IaC コードを社内ライブラリとして集約 ▸IaC を CDK に統一し、組織共通の CDK

    Construct 集として設計/運用 •プライベートレジストリで配布、各 PJ から取り込み ▸パッケージマネージャー経由で全 PJ に波及 •「個別の作業」を「組織の資産」へ昇華させる仕組み ▸一箇所の修正・改善が全社に行き渡る世界観をつくる 社内ライブラリ化と PJ 横断展開
  6. ※IXxx 型: アンオウンドリソース型 (読み込み専用型) ▸L2 Construct の fromXxx() メソッドでスタック外から取り込める ✓スタック外のリソースの

    ARN などを指定する ✓読み込み専用リソースとして、IBucket 型を返す ✓grants などの操作の対象にできる ② 再利用性を意識する
  7. ※IXxx 型: アンオウンドリソース型 (読み込み専用型) ▸同じ interface を実装する多種の Construct も渡せるようになる ✓IFunction:

    Function, NodejsFunction, SingletonFunction, etc… ▸IXxx 型の代わりに IXxxRef 型にするとさらに L1 Construct も渡せる ✓IBucketRef 型: Bucket, IBucket, CfnBucket どれも渡せる ✓PJ によって同じリソース種類でも L1 / L2 を使い分ける環境では特に◎ ② 再利用性を意識する
  8. •Construct で公開する public 変数も IXxx 型に ▸その Construct の外では読み込み専用リソースとして扱われる ▸IXxx

    型は読み込み専用なので更新メソッドを持たない → リソースを作成した Construct 外からはそのリソースを更新できない ✓安全性の向上・責務の凝集 ③ 更新の責務を閉じ込める
  9. •ライブラリ開発側 ▸公開しない内部 Construct では IXxx 化しなくても OK ✓IXxx にない便利メソッドを持つ Construct

    を使いたいこともある ✓IXxx 化は利用側の使いやすさのため → 非公開 Construct は適用外 •利用(各 PJ)側 ▸利用できる Construct が明確になり把握がしやすい ▸ライブラリ側に内部 Construct が多くあっても利用側には見えない ④ 開発者と利用者の境界を定める
  10. •ライブラリ側:GitLab パッケージレジストリに公開 ▸パッケージマネージャーのプライベートレジストリとして利用 •PJ 側:npm install (実際は pnpm を使用) ▸CDK

    (aws-cdk-lib) の更新と同じフローで利用できる ▸各 PJ はバージョンアップだけで新機能・共通変更に追従できる ライブラリの配布方法と各 PJ での利用方法
  11. 1. ライブラリを開発・リリース 2. 各 PJ でライブラリインストール + CDK 実装 ▸既存

    CDK 環境:該当 Construct をライブラリに置き換え ▸既存 CloudFormation 環境:新規 CDK 環境作成 (既存構成からの移行) 3. ドメイン以外のリソースをデプロイ ▸旧環境と並行稼働 + 新環境へのアクセス不可な状態を作る 4. データ移行 → ドメイン切り替えで完了 ▸メンテナンスにより無停止移行が不要に 移行アプローチ 当日 数日前
  12. •ステートフル:cdk import で既存リソースを取り込み ▸DB (Amazon Aurora) ▸データを失わず CDK 管理下に移し、整合性を慎重に確認しながら移行 •ステートレス:リソースの作り直し

    ▸置換が発生しても影響が少ないため、移行コストを下げる選択 ▸CDK で生成される テンプレートの差分比較 ✓論理名/物理名が異なる前提 ✓リソース・設定値レベルでの比較 既存構成からの移行 (CloudFormation→CDK)
  13. 1. コンソール画面から旧 DB のスナップショットを取得 2. 新 DB スタックの作成 (CDK) ▸DB

    クラスターが依存するリソースのみを先にデプロイ ▸cdk import 時に依存リソースが存在しないとエラーになるため 3. スナップショットから新 DB をリストア 4. MySQL 5.7 → 8 へアップグレード 5. DB クラスターを cdk import で CDK 管理下に取り込み 6. CloudFormation コンソールでドリフトがないか確認 7. DB クラスターに依存するその他のリソースをデプロイ Aurora を cdk import で取り込んだ手順
  14. •スナップショットテスト (各 PJ 側) ▸Construct の変更前後の CloudFormation テンプレートの比較 •integ テスト

    (ライブラリ側) ▸@aws-cdk/integ-tests-alpha + @aws-cdk/integ-runner ▸実 AWS 環境にデプロイ → 実挙動レベルで壊れていないか保証 •破壊的変更を防ぐ変更ルール (ライブラリ側) ▸リリース後の props への追加はオプショナルに ▸不要になったプロパティも削除せず @deprecated ラベルを JSDoc で明示 互換性維持:他 PJ を壊さない仕組み
  15. •Construct / props / メソッドに JSDoc を欠かさない ▸設計意図・利用例をコードと一緒に明文化 ▸コードとドキュメントの乖離も起こりにくい •利用者はエディタのホバー表示で簡単に確認

    ▸ドキュメントを探す手間がなく、錆びずに継続的に利用し続けられる ▸日常の開発ワークフローの中で自然に「資産」を活用できる状態に •コードとセットで置くことで AI エージェントも理解しやすい ドキュメント: JSDoc でコードと一体に
  16. 適用リポジトリ数 提供モジュール数 21 リポジトリ 13 モジュール 公開 Construct 数 22

    Construct 資産の蓄積 ※2026 年現在 ※非 Construct クラスや 関数を含めると 40 over
  17. •AWS サービスの新機能の導入・切り替え ▸Amazon CloudFront 標準ログ記録 v2 ▸Application Load Balancer ヘルスチェックログ

    ▸Amazon Athena テーブル定義もセットで提供 •Docker インラインキャッシュ機構の仕組み ▸全 PJ のデプロイ時間を一括短縮 •コンテナイメージスキャンの組み込み ▸サプライチェーン攻撃などの脆弱性対策を組織全体で標準化 資産の活用事例
  18. イメージスキャン Construct ライブラリ image-scanner-with-trivy https://github.com/go-to-k/image-scanner-with-trivy https://github.com/go-to-k/ecr-scan-verifier ecr-scan-verifier • CDK デプロイ中に

    Trivy によるスキャン • 脆弱性検出時、デプロイをブロック + 通知 • SBOM 出力 • Amazon ECR イメージスキャン(基本/拡張) • 脆弱性検出時、デプロイをブロック + 通知 • SBOM 出力
  19. •Before: 各 PJ で IaC コードを個別管理 ▸コードとしての非効率さ ▸組織としての非効率さ •After: 社内ライブラリを

    PJ 横断展開 → 組織共通の資産へ ▸CDK Construct 集 ▸プライベートレジストリからパッケージマネージャー経由で配布 IaC コードを資産へ