はじめに
IaC (Infrastructure as Code)、CloudFormation、AWS CDK、Terraform。 こうした言葉に興味を持って調べてみたものの、「何から手をつければいいか分からない」「コードでインフラを作るイメージが湧かない」という方も多いのではないでしょうか?
本記事では、TypeScriptを使用してAWS CDKアプリケーションを作成し、S3バケットの構築から削除までの一連の流れを解説します。
この記事を通して、AWS CDKの基本的な仕組みや、コードベースでのインフラ構築に対する理解を深めていただければ幸いです。
1. AWS CDK(Cloud Development Kit) とは?
AWS CDKは、TypeScriptやPythonなどのプログラミング言語を使ってインフラを定義できるフレームワークです。 CDKで記述したコードをビルド(合成)すると、裏側で自動的に「CloudFormationテンプレート」が生成(合成)され、それをもとにリソースが展開されます。
プログラミング言語の機能(変数、ループ、型補完など)を使えるため、効率よく、短いコードでインフラを記述できるのが特徴です。
CDKは TypeScript、Python、Java、C#、Goなど複数の言語をサポートしていますが、CDK自体がTypeScriptで開発されているため、構造的に最も親和性が高いのはTypeScriptと言えます。
また、公式ドキュメントや技術ブログなどの情報量もTypeScriptは豊富であるため、学習コストの低減やトラブルシューティングの容易さを踏まえると、TypeScriptによる開発が進めやすいと言えます。
2. ハンズオンの構成
今回のハンズオンでは、ローカル環境で作成したTypeScriptのコードをAWS CDKを使ってデプロイし、AWS上に「S3バケット」を1つ作成します。
本ハンズオンを通じて、以下のコマンドを使用したAWS CDK開発の一連の流れを学ぶことができます。
cdk initでプロジェクトの雛形を作成- TypeScriptコードでAWSリソースを定義
cdk deployでAWS上にリソースを作成(デプロイ)cdk destroyでリソースを削除(クリーンアップ)

3. ハンズオンStep1(環境構築)
CDKを実行するためには、以下のツールが必要です。
まだの方はインストールをお願いします。
- Node.js (CDKはNode.js上で動作するため)
Node.jsのインストール - AWS CLI(ローカルのターミナルからcdkコマンドを実行するため)
AWS CLIのインストール
3.1 CDKのインストールと作業用フォルダの作成
ターミナル(WindowsならPowerShellやコマンドプロンプト、MacならTerminal)を開き、以下のコマンドを実行してCDKをインストールします。
npm install -g aws-cdk
インストール後、以下のコマンドでバージョンが表示されればOKです。
cdk --version
続いて、作業用のフォルダを作成し、その中に移動しましょう。
mkdir cdk-s3-handson cd cdk-s3-handson
3.2 AWS認証情報の設定
- AWSへのアクセス権限設定
今回は、既存の設定や他のプロジェクトと混ざらないように、名前付きプロファイルを指定して設定します。
ご自身の環境に合わせて、以下のいずれかの手順を実行してください。
【パターンA:IAMユーザー(アクセスキー)を使用する場合】
aws configure --profile cdk-demo
※ コマンド実行後、AWS Access Key ID や Secret Access Key などを聞かれるので入力します。(この設定は cdk-demo という名前で保存されます)
【パターンB:SSO (IAM Identity Center) を使用する場合】
aws configure sso --profile cdk-demo
※ SSOを使用する場合、古い credentials ファイルの情報が残っていると認証エラーになることがあります。
CDKコマンド実行時にエラーが出る場合は .aws/credentials ファイルを確認してください。
3.3 CDKプロジェクトの初期化(init)と構成確認
以下のコマンドを実行すると、TypeScript用のCDKプロジェクトの雛形が自動生成されます。
cdk init app --language typescript --profile cdk-demo
※今回はプロファイルを指定したため、CDKコマンドを実行する際は、必ず末尾に --profile cdk-demo を付ける必要があります。
フォルダ構成の確認 :
初期化が終わると、いくつかのファイルが生成されます。 特に重要になるファイルは以下の2つです。
bin/cdk-s3-handson.ts: プログラムの実行開始地点(エントリポイント)
ここで「どのStack(構成のまとまり)を作るか」を定義します。lib/cdk-s3-handson-stack.ts: 使用するAWSリソースを記載する場所
具体的に「S3バケットを作る」といったリソースの定義は、このファイルの中に記述していきます。
3.4 CDK用の環境準備(Bootstrap)
CDKをそのAWS環境(リージョン)で初めて使う場合、CDKが利用する管理用リソースを準備する必要があり、これを「Bootstrap」と呼びます。
cdk bootstrap --profile cdk-demo
※ 成功すると、CloudFormationコンソールに CDKToolkit というスタックが作成されます。
4. ハンズオンStep2(コードの作成)
それでは、実際にS3バケットを作成するコードを書いてみましょう。
今回は bin フォルダと lib フォルダ配下の2つのファイルを修正します。
ステップ①:エントリポイントの記述 (bin/cdk-s3-handson.ts)
まずは、アプリの入り口となるファイルを修正します。
bin/ 配下の cdk-s3-handson.ts を以下のコードに修正してください。
#!/usr/bin/env node
import 'source-map-support/register'; // エラー時のスタックトレースを見やすくするユーティリティ
import * as cdk from 'aws-cdk-lib'; // AWS CDKの基本ライブラリをインポート
import { CdkS3HandsonStack } from '../lib/cdk-s3-handson-stack'; // libフォルダで定義したStackクラスを読み込み
const app = new cdk.App(); // CDKアプリケーション全体の初期化(ルートとなる要素)
// 定義したStack(S3リソースの定義)をアプリに追加して実体化する
new CdkS3HandsonStack(app, 'CdkS3HandsonStack', {
});
ステップ②:メインロジックの記述 (lib/cdk-s3-handson-stack.ts)
次に、S3バケットを定義するメインのコードを記述します。
lib/ 配下の cdk-s3-handson-stack.ts を以下のコードに修正してください。
import * as cdk from 'aws-cdk-lib'; // AWS CDKのコアライブラリ(StackやAppなど)をインポート
import { Construct } from 'constructs'; // Construct(リソース構成要素の基本クラス)をインポート
import * as s3 from 'aws-cdk-lib/aws-s3'; // S3モジュールをインポート
// Stackクラスを定義(CloudFormationの1つのスタックに相当)
export class CdkS3HandsonStack extends cdk.Stack {
// コンストラクト:Stackが初期化される際に呼ばれる処理
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props); // 親クラス(cdk.Stack)のコンストラクタを呼び出し
// S3バケットの作成
const bucket = new s3.Bucket(this, 'MyBucket', {
bucketName: 'my-cdk-handson-bucket0001', // バケット名は一意になるように設定する
versioned: true, // バージョニングを有効化
removalPolicy: cdk.RemovalPolicy.DESTROY, // スタック削除時にバケットも削除する
autoDeleteObjects: true, // バケット削除時に中身のファイルも自動削除する
});
// 作成されたバケット名をコンソールに出力
new cdk.CfnOutput(this, 'BucketNameOutput', {
value: bucket.bucketName,
description: 'S3バケットが作成されました',
});
}
}
カスタムコードの解説
- S3バケットの定義で、デフォルトの状態からこちらで追記した設定オプション (Props)のコードについて解説します。
versioned: true
バケットのバージョニング機能をONにします。removalPolicy: cdk.RemovalPolicy.DESTROY
通常、CloudFormationはデータ保護のため、スタック削除コマンドを実行してもバケットを残そうとします。
しかし、今回はハンズオンなので、スタック削除時にバケットも削除されるように設定します。autoDeleteObjects: true
S3バケットは中身(ファイル)が入っていると削除エラーになります。
この設定を入れることで、削除時に中身を自動で空にしてからバケットを消してくれます。
エラーになりがちなポイントを回避する重要な設定です。
5. ハンズオンStep3(デプロイ〜削除)
ステップ①:CloudFormationテンプレートの確認
デプロイ前に、TypeScriptコードがどのようなCloudFormationテンプレートに変換されるか確認します。
cdk synth --profile cdk-demo
※想定していないリソースが記載されている場合はここで確認できます。
ステップ②: デプロイ
実際にAWSリソースを作成します。
cdk deploy --profile cdk-demo
- 実行すると、「IAMポリシーの変更などが発生するけど大丈夫?」と聞かれるので、y(Yes)を入力してEnterを押します。

- 数分待つと、Stack ARN や BucketNameOutput が表示され、完了します。
ステップ③:作成されたリソースの確認
- AWSマネジメントコンソールで「S3」にアクセスすると、
my-cdk-handson-bucket...から始まるバケットができていることが確認できます。 - 同じように CloudFormation にアクセスすると、
CdkS3HandsonStackというスタックができていることが確認できます。

ステップ④:リソースの削除
最後に、以下のコマンドで作成したリソースを削除します。
cdk destroy --profile cdk-demo
- 確認メッセージが出るので y を入力します。
- これでS3バケットも含め、今回作成したリソースがすべてきれいに削除されます。
(コード内で removalPolicy と autoDeleteObjects を設定したため)

6. まとめ
本記事では、AWS CDK (TypeScript) を使用した環境構築の基本からデプロイ・削除までを解説しました。
インフラの規模が大きくなるほど、このコード管理による利便性が向上します。
今回はS3のみを作成しましたが、EC2やLambdaなどの他リソースも同様にTypeScriptのクラスとして定義可能です。
次回は、CDKを用いてVPCおよびEC2(Webサーバー)を構築し、実際にブラウザからアクセスする手順を解説します。


