- 公開日
- 最終更新日
【AWS CDK】AWS CDKを触ってみる
この記事を共有する
目次
はじめに
こんにちは、パーソル&サーバーワークスのEndoです。
以前の記事で AWS CDK の概要 についてまとめました。
今回は、実際に AWS CDK を使ってサンプルアプリケーションを構築していきたいと思います。
作成するアプリケーション
本記事では aws-cdk-examples を使用して、TypeScript内にある Lambda Layer の内容を確認およびデプロイしていきます。
aws-samples とは
Github リポジトリ aws-samples には、特定のユースケースやシナリオにおける AWS サービスの実用的な実装を示すサンプルコード群が配置されています。
今回はその中の aws-cdk-examples リポジトリ ( CDK の公式サンプルコードリスト) を参考に、CDK デプロイの初歩的な実践をしていきます。
Lambda Layer サンプルについて
Lambda Layer の構成について、事前に確認しておきたいと思います。
本プロジェクトは レベル 2 (L2) コンストラクト で抽象化表現されています。
各ディレクトリ(ファイル)の役割は以下のとおりです。実ファイルはこちらからご確認ください。
lambda-layer/
├── bin/
│ └── lambda-layer.ts # CDK アプリの定義
├── lib/
│ └── lambda-layer-stack.ts # CDK スタックの定義(Lambda と Layer を定義している部分)
├── resources/
│ ├── lambda/
│ │ └── index.js # Lambda 関数にデプロイされるコード
│ └── layers/helper/nodejs/node_modules/helper
│ ├── index.ts # Lambda 関数のレイヤー用コード
│ └── package.json # レイヤー用コードの依存設定定義
├── README.md # 本プロジェクトの説明ファイル
├── cdk.json # アプリの実行方法に関する指示を AWS CDK CLI に提供
├── package.json # 依存ライブラリなど、CDK プロジェクトに関する情報用ファイル
└── tsconfig.json # ts から js へのコンパイル用ファイル
実行環境と前提条件
今回の検証では、git、npm などの各パッケージがインストール済である EC2 (Amazon Linux 2023) から cdk deploy を実施します。
実行環境となる EC2 および VPC などのネットワークリソースについては作成されているものとし、本記事では構築手順を割愛します。
サンプルアプリケーション構築
git clone
今回は Github 上のプログラムを使用するため、作業前に git clone する必要があります。
クローンする際は、Github リポジトリのコードタブから、クローン用の Web URL をコピーします。

コピー後、EC2 にて git clone コマンドを実行します。
$ git clone https://github.com/aws-samples/aws-cdk-examples.git
Cloning into 'aws-cdk-examples'...
remote: Enumerating objects: 9861, done.
remote: Counting objects: 100% (255/255), done.
remote: Compressing objects: 100% (127/127), done.
remote: Total 9861 (delta 198), reused 128 (delta 128), pack-reused 9606 (from 4)
Receiving objects: 100% (9861/9861), 116.75 MiB | 22.74 MiB/s, done.
Resolving deltas: 100% (4907/4907), done.
クローン完了後、VSCodeから作業ディレクトリを開くとリモートリポジトリのディレクトリ構成がローカル環境に複製されていることを確認できます。

aws-cdk のインストール
続いて、今回デプロイする Lambda-Layer のディレクトリに移動します。
$ cd aws-cdk-examples/typescript/lambda-layer/
ここからは、基本的に README.md に記載されている手順で進めていきます。
まずは以下のコマンドで aws-cdk をインストールします。
$ npm install -g aws-cdk
changed 1 package in 2
続いて、package.json に記載されている依存ライブラリをインストールします。
$ npm install
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
added 341 packages, and audited 378 packages in 40s
47 packages are looking for funding
run `npm fund` for details
1 low severity vulnerability
To address all issues, run:
npm audit fix
Run `npm audit` for details.
npm install を行うと、package-lock.json ファイルと node_modules フォルダが作成されます。
内容はそれぞれ以下のとおりです。
- package-lock.json:実際にインストールされたパッケージバージョンが記載
- node_modules フォルダ:依存パッケージの実態が配置

cdk bootstrap
ここからは、実際に AWS Management Console へのリソースデプロイを行っていきます。
まずは cdk bootstrap を実行します。
awd cdk bootstrap では、AWS CDK を使用するにあたって必要なリソースをデプロイするためのプロセスです。以下のリソースが作成され、これらは一般にブートストラップリソースと呼ばれます。
- Amazon Simple Storage Service (Amazon S3) バケット:AWS Lambda 関数コードやアセットなどの CDK プロジェクトファイルを保存するために使用
- Amazon Elastic Container Registry (Amazon ECR) リポジトリ:主に Docker イメージの保存に使用
- AWS Identity and Access Management (IAM) ロール:デプロイを実行するために AWS CDK に必要なアクセス許可
※ awd cdk bootstrap より一部引用
実際に cdk bootstrap を実行すると、以下のように作成されるリソースのステータスが表示されます。
ブートストラップ実行中画面
$ cdk bootstrap
⏳ Bootstrapping environment aws://XXXXXXXXXXXXXXXX/ap-northeast-1...
Trusted accounts for deployment: (none)
Trusted accounts for lookup: (none)
Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.
CDKToolkit: creating CloudFormation changeset...
[██████████████████████████████████████▋···················] (8/12)
2:57:53 PM | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | CDKToolkit
2:58:19 PM | CREATE_IN_PROGRESS | AWS::IAM::Policy | ImagePublishingRoleDefaultPolicy
2:58:19 PM | CREATE_IN_PROGRESS | AWS::IAM::Policy | FilePublishingRoleDefaultPolicy
2:58:19 PM | CREATE_IN_PROGRESS | AWS::IAM::Role | DeploymentActionRole
cdk bootstrapの実行が完了すると、bootstrapped と表示されます。
ブートストラップ完了画面
$ cdk bootstrap
⏳ Bootstrapping environment aws://XXXXXXXXXXXXXXXX/ap-northeast-1...
Trusted accounts for deployment: (none)
Trusted accounts for lookup: (none)
Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.
CDKToolkit: creating CloudFormation changeset...
✅ Environment aws://XXXXXXXXXXXXXXXX/ap-northeast-1 bootstrapped.
AWS Management Console からも、AWS CloudFormation スタックに CDK Toolkit がデプロイされていることを確認できます。

cdk deploy
cdk bootstrap が完了したら、Lambda Layer をデプロイできます。
実際の運用では cdk bootstrap から cdk deploy の間に、cdk synth や、cdk diff を実行して、作成されるリソースを確認するかと思いますが、今回は README.md に従って割愛します。
cdk deploy コマンドを実行します。
コマンドを実行すると、CloudFormation テンプレートファイル生成処理などが行われ、変更(作成)されるリソースが表示されます。
※リソースは一部表示されない場合があるようです。
$ cdk deploy
✨ Synthesis time: 10.27s
LambdaLayerStack: start: Building HelperLayer/Code
LambdaLayerStack: success: Built HelperLayer/Code
LambdaLayerStack: start: Building LambdaFunction/Code
LambdaLayerStack: success: Built LambdaFunction/Code
LambdaLayerStack: start: Building LambdaLayerStack Template
LambdaLayerStack: success: Built LambdaLayerStack Template
LambdaLayerStack: start: Publishing LambdaLayerStack Template (current_account-current_region)
LambdaLayerStack: start: Publishing HelperLayer/Code (current_account-current_region)
LambdaLayerStack: start: Publishing LambdaFunction/Code (current_account-current_region)
LambdaLayerStack: success: Published HelperLayer/Code (current_account-current_region)
LambdaLayerStack: success: Published LambdaFunction/Code (current_account-current_region)
LambdaLayerStack: success: Published LambdaLayerStack Template (current_account-current_region)
Stack LambdaLayerStack
IAM Statement Changes
┌───┬───────────────────────────────────┬────────┬────────────────┬──────────────────────────────┬───────────┐
│ │ Resource │ Effect │ Action │ Principal │ Condition │
├───┼───────────────────────────────────┼────────┼────────────────┼──────────────────────────────┼───────────┤
│ + │ ${LambdaFunction/ServiceRole.Arn} │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │
└───┴───────────────────────────────────┴────────┴────────────────┴──────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬───────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┐
│ │ Resource │ Managed Policy ARN │
├───┼───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┤
│ + │ ${LambdaFunction/ServiceRole} │ arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole │
└───┴───────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)
"--require-approval" is enabled and stack includes security-sensitive updates: 'Do you wish to deploy these changes' (y/n)
内容を確認し、問題なければ y を入力して Enter キーを押下します。
デプロイが完了すると、以下のように CloudFormation の Stack ARN が出力されます。
LambdaLayerStack: deploying... [1/1]
LambdaLayerStack: creating CloudFormation changeset...
✅ LambdaLayerStack
✨ Deployment time: 41.8s
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXXX:stack/LambdaLayerStack/XXXXXXXXXXXXXXXXXXXXXXXXXXXX
✨ Total time: 52.07s
AWS Management Console から、Lambda Layer がデプロイされていることを確認します。


これで作業は完了です。なお、不要なリソースは cdk destroy で削除することができます。
おわりに
今回は aws-cdk-examles 内のサンプルアプリケーションを作成してみました。
サンプルアプリケーションは手軽にデプロイができますが、ユースケースに沿って一部修正してみたりする(例:作成された Lambda 関数のランタイムが Node.js 18.x(2025年9月から非推奨のランタイム)のため、最新バージョンに修正する)ことで、より理解が深まるのではないかなと思います。
次回はサンプルアプリケーションを使わずに、cdk init ~ cdk destroy までの流れを実践した記事を執筆できればと考えています。
本記事がどなたかのご参考になれば幸いです。
この記事は私が書きました
S.Endo
記事一覧コーヒーインストラクター検定2級を所持しているエンジニアです。コーヒーを飲みながら仕事をしています。