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

CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?

Avatar for Makky12 Makky12
September 12, 2025

CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?

2025/09/12(金)開催の「JAWS-UG CDK支部#22 大阪でもCDKしたいねん」における私の発表「CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?」の発表資料になります。 #jawsug_cdk

https://jawsug-cdk.connpass.com/event/365121/

Avatar for Makky12

Makky12

September 12, 2025
Tweet

More Decks by Makky12

Other Decks in Technology

Transcript

  1. 1 KDDI Agile Development Center Corporation 自己紹介 ◼ 氏名:鈴木 正樹

    ◼ 所属:KDDIアジャイル開発センター(KAG) 名古屋オフィス ◼ 役割:クラウドアーキテクト & バックエンドエンジニア AWS(特にサーバーレスやInfrastructure as Code)が大好き。好きなサービスはAWS LambdaとAWS CDK 主にJAWS-UG 名古屋 & JAWS-UG CDK支部で活動 ◼ Certification: ◼ AWS Solution Architect Associate(2023) ◼ AWS Community Builder(serverless)(2023~) ◼ Scrum Inc. 認定スクラムマスター(2025~) ◼ : @makky12(SUZUKI Masaki@クラウドエンジニア) ◼ Blog:https://makky12.hatenablog.com/
  2. 2 KDDI Agile Development Center Corporation 本日のアジェンダ • 前提:CDK Toolkit

    Libraryについて • CDK Toolkit Libraryでどうやるの?な機能 ◦ cdk.outファイル出力/context情報読み込み ◦ AWS CLI プロファイル情報指定 ◦ 確認メッセージの表示 • まとめ
  3. 3 KDDI Agile Development Center Corporation 注意事項 • CDK Toolkit

    Libraryの基本的な説明や使用方法などは、今回は省略します ◦ (正式な情報は、公式サイトをご確認ください) • 発表資料・発言内容は、すべて個人の見解・知見になります • この資料は、下記URLで公開済みです。 ◦ この資料です • 私のブログでも、今回の発表内容に関連する記事を公開しています ◦ https://makky12.hatenablog.com/entry/2025/09/08/120500
  4. 5 KDDI Agile Development Center Corporation 前提:CDK Toolkit Libraryとは ※CDK

    Toolkit Libraryの概要 • 今までCLI(=CDK CLI)で実施していたAWS CDKの各種処理を、プログラムコードから実 行可能なライブラリ • 下記のようなメリットがある ◦ インフラライフサイクルの細かいハンドリング&CDKソースとの統合 ◦ インテグレーションテスト・一時的な環境での動作検証 ◦ コードベースによる型の恩恵・命名規則、セキュリティベースライン、コーディングルールの一元管理…など • 2025/09/12現在、Node.js(TypeScript/JavaScript)にのみ対応
  5. 6 KDDI Agile Development Center Corporation 前提:CDK Toolkit Libraryとは CDK

    Toolkit Libraryの概要 • 2025/07/05開催の「JAWS ミート 2025」にて「CDK Toolkit Libraryの紹介」という内容 でLTしましたので、詳しく知りたい方はそちらをご参照ください https://speakerdeck.com/smt7174/cdk-toolkit-librarynoshao-jie
  6. 9 KDDI Agile Development Center Corporation cdk.outファイル出力/context情報読み込み • CDK CLIでは「cdk

    synth」「cdk deploy」などのコマンド実施時に、下記処理を実施 ◦ 「cdk.out」ファイル出力(クラウドアセンブリ≒CloudFormationテンプレートファイル出力) ◦ context情報読み込み(「cdk.json」ファイル、「--context」コマンドオプションなど) • CDK Toolkit Libraryでは、クラウドアセンブリを「fromAssemblyBuilder」関数で作成した 場合、これの処理が実施されない ◦ 「fromCdkApp」関数で作成した場合は実施されます • CDK Toolkit Libraryでこれらの処理を実施したい場合、どうすればいいの?
  7. 10 KDDI Agile Development Center Corporation A: 関数の第2引数で、各種プロパティを設定する • 「fromAssemblyBuilder」関数の第2引数に各種プロパティを設定することで、処理が実施

    されます(詳細は下記ソース参照) • なおこれらの詳細については、下記ブログを参照 ◦ CDK Toolkit LibraryとCDK CLIの違い (AWS Hero 後藤さん のブログ) const assembly = await toolkit.fromAssemblyBuilder(async () => { const app = new App(); new HogeStack(app, 'HogeStack'); return app.synth(); }, { // 「cdk.out」ファイルを出力する(「outdir」プロパティを設定) outdir: path.resolve(__dirname, './cdk.out’), // context情報を「cdk.json」ファイルから読み込む(「contextStore」プロパティを設定) contextStore: new CdkAppMultiContext(path.resolve(__dirname, '.')), }); // ちなみに「fromAssemblySource」関数ではこのように指定する const source = await toolkit.fromAssemblyDirectory(path.resolve(__dirname, './cdk.out’));
  8. 11 KDDI Agile Development Center Corporation context値の上書き、および新規作成について • 「既存のcontext値の上書き」および「新規context値の設定」は、以下の方法で可能 ◦

    「CdkAppMultiContext」クラスコンストラクタの第2引数(commandlineContext)で設定する ◦ 「CdkAppMultiContext」クラスインスタンスの「update」メソッドで設定する ◦ 詳細は下記コードを参照 // CdkAppMultiContextの第2引数にcontext情報を設定する方法 const assembly = await toolkit.fromAssemblyBuilder(async () => { …(略) // 前ページのコードと同じ }, { // CdkAppMultiContextの第2引数にcontext情報を設定する方法 contextStore: new CdkAppMultiContext(path.resolve(__dirname, '.'), { environment: 'stg'; }), }); // 「update」メソッドでcontext情報を設定する方法 const ctxStore = new CdkAppMultiContext(path.resolve(__dirname, '.')); ctsStore.update({ environment: 'prod'; }); const assembly = await toolkit.fromAssemblyBuilder(async () => { …(略) // 前ページのコードと同じ }, { contextStore: ctxStore, });
  9. 13 KDDI Agile Development Center Corporation AWS CLI プロファイル情報指定 •

    CDKでは各コマンド実行時に「--profile」オプションでAWS CLIのプロファイル情報を使用 できた(=コマンド実行するIAMユーザーを指定可能) • CDK Toolkit Libraryでは「--profile」オプションでもプロファイル情報は指定できない ◦ CDK Toolkit Libraryはコマンドを「node(ts-node) xxx.ts」のように指定する ◦ 実行するのは(AWS CDK/AWS CLIではなく)node.jsのため「--profile」オプション自体が存在しない • プロファイル情報を指定してCDK Toolkit Libraryを実行したい場合、どうすればいいの?
  10. 14 KDDI Agile Development Center Corporation A: Toolkitコンストラクタで「sdkConfig」プロパティを設定する • 「Toolkit」クラスコンストラクタの「sdkConfig」プロパティに

    「BaseCredentials.awsCliCompatible」関数から情報を設定することで読み込み可能 • 公式サイトだと「sdkConfig」プロパティに直接profile情報を設定しているが、これだと正 しく動かないので注意(TypeScriptの型不一致エラーが出る) // 「Toolkit」クラスコンストラクタでAWS CLIプロファイル情報を読み込む import { Toolkit, BaseCredentials } from '@aws-cdk/toolkit-lib'; const toolkit = new Toolkit({ sdkConfig: { baseCredentials: BaseCredentials.awsCliCompatible({ profile: 'xxxxx' }), }, });
  11. 16 KDDI Agile Development Center Corporation 確認メッセージの表示 • CDKでは一部センシティブな処理の実行前に、ユーザーに確認行っていた ◦

    (例)S3バケット/IAMポリシー/CloudFormationスタック削除…etc. ◦ 「--require-approval」オプションの初期値が「BROADENING(=実行前に確認する)」のため • CDK Toolkit Libraryでは、これらの処理実行前に確認を行わない • 一部センシティブな処理の実行前に確認を行わせたい場合、どうすればいいの?
  12. 17 KDDI Agile Development Center Corporation A: Toolkitコンストラクタで「ioHost」プロパティを設定する • 「Toolkit」クラスコンストラクタの「ioHost.requestResponse」プロパティに確認処理を

    行うメソッドを定義することで確認メッセージの表示が可能 • 「ioHost」では「requestResponse」の他に、各種処理実行時の実行情報を表示するための 「notify」プロパティも設定可能 ◦ メッセージレベル(info, warn, errorなど)に応じた処理を定義する • この「ioHost」周りの設定は少々難しい部分なので、詳しくは公式サイトを参照 // 「Toolkit」クラスコンストラクタで確認メッセージを表示するようにする const toolkit = new Toolkit({ ioHost: { notify: async function (msg) {...(なんか処理)}, // 今回は省略 requestResponse: async function (msg) { // 確認処理用のメソッドを定義し、戻り値として返す return showPromptForApproval(msg.message); }, } });
  13. 18 KDDI Agile Development Center Corporation 補足:「requestResponse」周りの設定について • CDK Toolkit

    Libraryでは「ioHost」の初期値に「NonInteractiveIoHost」クラスが設定され ているため「事前確認を一切行わない(=非インタラクティブ)」設定になっている • ただこれだと「CloudFormationスタックの削除を確認なしにダイレクトに実行する」とても 危険な状態のため「requestResponse」だけは早めに設定変更したほうが良い • なお「requestResponse」の実装の詳細は下記サイトを参照 ◦ CDK Toolkit Library 公式サイト ◦ CDK Toolkit Library で対話的なコマンド実行を実現する(山梨 蓮さんのブログ)
  14. 20 KDDI Agile Development Center Corporation まとめ • CDK Toolkit

    Libraryを使用することで「デプロイライフサイクルを一元管理できる」「CDK の各種処理をコードで記載できる」などのメリットが得られる • 本資料で紹介した方法を使用する事で、CDK CLIで使用していた機能をCDK Toolkit Library で使用可能(公式APIリファレンスを参照する) • CDK Toolkit Libraryのデフォルト設定は「確認処理を一切行わない」となっており、これは 「CloudFormationスタックの削除を確認なしに行う」危険な状態であるため、「Toolkit」 クラスコンストラクタの「ioHost.requestResponse」プロパティで早めに変更しておく
  15. 札幌オフィス SAPPORO OFFICE 秋田オフィス AKITA OFFICE 高崎オフィス TAKASAKI OFFICE 金沢オフィス

    KANAZAWA OFFICE 舞鶴オフィス MAIZURU OFFICE 広島オフィス HIROSHIMA OFFICE 福岡オフィス FUKUOKA OFFICE 那覇オフィス NAHA OFFICE 仙台オフィス SENDAI OFFICE 東京本社 TOKYO MAIN OFFICE 三島オフィス MISHIMA OFFICE 名古屋オフィス NAGOYA OFFICE 大阪オフィス OSAKA OFFICE