はじめに
おはようございます!TechBullの木村と申します!この記事はTechBullアドベントカレンダー最終日の記事となります!
皆様は、CDKデプロイを行う際に「cdk deploy --allで全てスタックが展開されると困るな〜」と思う機会はないでしょうか?例えば、下記図のようにCI/CDで展開したいリソースと、手動で展開したいリソースが混在する場合がまさにそうなのではないでしょうか?

今回CDKのエントリポイントを分けることで、CI/CDと手動のようなデプロイ方法を分ける方法を考えましたので、その紹介をしていきたいと思います!
通常の(cdk deploy --allでデプロイされる)エントリポイント
例えば、AutomaticDeployStackというスタックをcdk deploy --allでデプロイしたい場合、bin配下のファイルに下記のように記載すると思います。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// ./bin/main.ts import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { AutomaticDeployStack } from '../lib/automatic-deploy-stack'; const app = new cdk.App(); // 環境変数からアカウントとリージョンの情報を取得 const account = process.env.CDK_DEFAULT_ACCOUNT; const region = process.env.CDK_DEFAULT_REGION; new AutomaticDeployStack(app, 'AutomaticDeployStack', { env: { account: account, region: region } }); |
この時、どのbin配下のどのファイルをCDKアプリとして読み込むかは cdk.json の app で指定しており、package.json の bin で npm実行時のエイリアス用の設定がされているので、cdk deployを成功させるにはこれらのファイルでmain.tsを指定してやる必要があります。
まず、package.jsonでは下記nameとbin{}内をファイル名に合わせて変更します。
|
1 2 3 4 5 6 7 8 9 10 |
// ./package.json { "name": "main", "version": "0.1.0", "private": true, "bin": { "main": "bin/main.ts" }, // 以下省略 |
次に、cdk.jsonでは下記を修正してください。これで、cdk deploy --allでデプロイできる環境が整いました。
|
1 2 3 4 5 6 7 |
{ "app": "npx ts-node --prefer-ts-exts bin/main.ts", "watch": { "include": ["**"], "exclude" // 以下省略 |
cdk deploy --all以外の方法でデプロイするためのエントリポイント
それでは、今度はcdk deploy --all以外の方法でデプロイするスタック(ManualDeployStack)をbin配下にsub-resource.tsというファイルを作成して、そこに記載していきたいと思います
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// ./bin/sub-resource.ts import "source-map-support/register"; import * as cdk from "aws-cdk-lib"; import { ManualDeployStack } from '../lib/manual-deploy-stack'; // アプリケーションの初期化 const app = new cdk.App(); // 環境変数からアカウントとリージョンの情報を取得 const account = process.env.CDK_DEFAULT_ACCOUNT; const region = process.env.CDK_DEFAULT_REGION; // パイプラインスタックを作成 new ManualDeployStack(app, "ManualDeployStack", { account: account, region: region }); |
記載内容は先ほどとそれほど変わりません。ファイルを分けただけになります。最後にデプロイする時ですが、下記コマンドを実行します。
|
1 |
$ cdk deploy --app "npx ts-node --prefer-ts-exts bin/sub-resource.ts" --all |
このようにbin配下のファイルを分けて、コマンドを上記にすることで、デプロイするスタックをエントリポイントで分けることができます!
まとめ
いかがでしょうか?今回はCDKのエントリポイントを分けて、デプロイしたいスタックを分ける方法について記載いたしました。
簡単な内容ですが、意外と知らなかった方もいるのではないでしょうか?この記事が誰かの助けになれば幸いです。

1992年生まれのインフラエンジニア。建築資材の営業マンから、エンジニアへキャリアチェンジし、エンジニア歴としては3年目となる。都内の受託会社にて様々なAWS案件に携わり、3年目にてAWS All Certification EngineersやAWS Top Engineersに選出される。業務領域を超えた幅広い知識を身につけるためTechBullコミュニティへ参画。業界未経験という立場からインフラエンジニアへキャリアアップした経験やクラウド関連の記事を執筆。
