---
title: "AWS CDK（cdk）とは？仕組み・使い方とCloudFormation・Terraformとの違い"
url: "https://www.issoh.co.jp/tech/details/3161/"
published: 2024-07-26
updated: 2026-09-15
categories: ["AWS"]
publisher: "株式会社一創"
---

# AWS CDK（cdk）とは？仕組み・使い方とCloudFormation・Terraformとの違い

「cdk」と検索したとき、開発の文脈でまず指すのは **AWS CDK（AWS Cloud Development Kit）**です。AWS CDKは、TypeScriptやPythonなど使い慣れたプログラミング言語でAWSのインフラを「コード」として定義し、AWS CloudFormation を通じてデプロイできるオープンソースのフレームワークです。なお、医療分野の「CKD（慢性腎臓病）」とは綴りが似ているだけの別物で、本記事はインフラ構築ツールのAWS CDKを扱います。この記事では、CDKの基本概念・仕組み・使い方と、CloudFormation や Terraform との違いまでをまとめて解説します。

## まとめ（先に結論）

- AWS CDKは、プログラミング言語でAWSインフラを定義する**IaC（Infrastructure as Code）**フレームワーク。裏側ではCloudFormationが動く。
- 対応言語はTypeScript / JavaScript / Python / Java / C#(.NET) / Go。実務ではTypeScriptが主流。
- 現行は**v2**。v1は2023年6月1日にサポート終了済みのため、これから始めるならv2一択。
- 基本フローは `cdk init` →（合成）`cdk synth` →（初回のみ）`cdk bootstrap` →（デプロイ）`cdk deploy`。
- CloudFormationの生のYAML/JSONより少ないコードで書け、Terraformと違いAWS特化でCloudFormationの自動ロールバック等を活用できる。

以下で、それぞれを順に見ていきます。

## AWS CDKとは何か

AWS CDKは、AWSが提供するオープンソースのソフトウェア開発フレームワークです。従来のように管理コンソールを手作業で操作したり、CloudFormationのテンプレートを直接書いたりする代わりに、プログラミング言語でクラウドインフラを定義します。書いたコードは最終的にAWS CloudFormationのテンプレートへ変換され、CloudFormationがリソースを構築します。

IaCには、ChefやAnsibleのように手順を記述する「手続き型」と、必要なリソースの最終形を宣言する「宣言型」があります。AWS CDKはTerraformと同じ**宣言型**に分類され、「どうなっていてほしいか」を定義するとCDKとCloudFormationが差分を計算してプロビジョニングします。

### AWS CDKを構成する2つの要素

AWS CDKは大きく次の2つで構成されます。

- **コンストラクトライブラリ（aws-cdk-lib）**：AWSリソースを表す部品（コンストラクト）の集合。各言語のパッケージとして提供される。
- **CDK Toolkit（CDK CLI）**：`cdk` コマンド本体。合成・デプロイ・差分確認などを実行する。

v2ではライブラリが `aws-cdk-lib` 1つに統合され、サービスごとに別パッケージを入れていたv1より依存管理がシンプルになりました。

### 対応言語とバージョン

AWS CDKはTypeScript、JavaScript、Python、Java、C#(.NET)、Goに対応しています。実務ではエコシステムが最も充実したTypeScriptが選ばれることが多いです。バージョンは現行のv2を使います。v1は2022年6月1日にメンテナンスモードへ移行し、2023年6月1日にサポートが終了しているため、新規採用の選択肢にはなりません。CLIの実行にはNode.jsが必要で、サポート対象はLTSの20.x・22.x・24.x系です（16.x・18.x系は既にサポートが終了しているため、これから始めるなら22.x以上を推奨します）。

## AWS CDKの仕組み（App / Stack / Construct）

CDKのコードは **App → Stack → Construct** という階層で構成されます。

- **App**：最上位の要素。複数のStackをまとめ、その依存関係を定義する。
- **Stack**：CloudFormationの「スタック」に対応する、デプロイの最小単位。
- **Construct**：1つ以上のAWSリソースを表す再利用可能な部品。

コンストラクトには抽象度の異なる3つのレベルがあります。**L1**はCloudFormationのリソースと1対1で対応する低レベル部品（クラス名に `Cfn` 接頭辞が付く）、**L2**は適切なデフォルト値や便利なメソッドを備えた高レベル部品、**L3（Patterns）**は複数のリソースを束ねた構成パターンです。通常はL2を中心に書き、細かく制御したい箇所だけL1を使い分けます。

実行面では、`cdk synth` でコードがCloudFormationテンプレート（YAML/JSON）へ合成され、`cdk deploy` でそのテンプレートをCloudFormationが構築します。つまりCDKは「言語で書く層」、実際の構築は使い慣れたCloudFormationが担う構図です。CloudFormationそのものについては「[AWS CloudFormationとは？テンプレートの書き方から使い方までわかりやすく解説](/tech/details/2927/)」も参照してください。

## CloudFormation・Terraformとの違い

AWS CDK・CloudFormation・TerraformはいずれもIaCを実現しますが、記述方法と守備範囲が異なります。

| 項目       | AWS CDK        | CloudFormation | Terraform  |
| -------- | -------------- | -------------- | ---------- |
| 記述方法     | プログラミング言語      | YAML / JSON    | HCL        |
| 対応範囲     | AWS中心          | AWS専用          | マルチクラウド    |
| 抽象化      | 高（L2/L3）       | 低              | 中          |
| 実行基盤     | CloudFormation | 自身             | プロバイダAPI直接 |
| 自動ロールバック | あり             | あり             | 基本なし       |
| 学習対象     | 言語＋CDK         | テンプレート記法       | HCL        |

CDKは内部でCloudFormationを使うため、CloudFormationの自動ロールバックやドリフト検出といった機能をそのまま享受できます。一方Terraformは各クラウドのAPIを直接呼ぶため、AWS以外も含むマルチクラウドに強く、デプロイ速度の面でも有利になりやすい反面、自動ロールバックは基本的に持たず、適用に失敗した場合は処理が止まって部分的な変更が残るため、手動での修正や破棄が必要になります。AWSに閉じた構成ならCDK、複数クラウドを統一管理したいならTerraform、という整理が目安です。Terraformのマネージド版については「[HCP Terraformとは？旧Terraform Cloud（名称変更）の機能・料金とHCPでの位置づけを解説](/tech/details/3340/)」で解説しています。

## AWS CDKの使い方（入門）

### インストールと前提

事前にNode.js（推奨はLTSの22.x以上。20.x・24.xも可）とAWS CLI／認証情報の設定が必要です。CDK CLIはnpmで導入します。

```
npm install -g aws-cdk
cdk --version
```

### プロジェクト作成からデプロイまで

基本的な流れは次のとおりです。

```
# プロジェクト作成（TypeScript）
cdk init sample-app --language typescript

# コードをCloudFormationテンプレートに合成して確認
cdk synth

# 初回のみ：CDK用のリソース（S3バケット等）を準備
cdk bootstrap

# デプロイ（内部で synth も実行される）
cdk deploy

# 不要になったら削除
cdk destroy
```

`cdk bootstrap` はAWSアカウント・リージョンごとに最初の一度だけ実行します。`cdk deploy` を実行すると裏で `cdk synth` が走り、生成されたテンプレートをCloudFormationが構築します。なお `cdk init` のテンプレートは、最小構成の `app` とサンプルリソース付きの `sample-app` から選べます。初めて触る場合は、生成物がシンプルで挙動を追いやすい `app` から始めるのも分かりやすい方法です。

### 最小のスタック例（TypeScript）

L2コンストラクトでS3バケットを定義する例です（AWS公式ドキュメントに準拠した記述例）。バージョニングを有効にしたバケットを数行で定義できます。

```
import { App, Stack, StackProps } from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';

class HelloCdkStack extends Stack {
  constructor(scope: App, id: string, props?: StackProps) {
    super(scope, id, props);

    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true,
    });
  }
}

const app = new App();
new HelloCdkStack(app, 'HelloCdkStack');
```

同じバケットをCloudFormationのYAMLで書くより記述量が少なく、IDEの補完や型チェックが効く点がCDKの利点です。なお実際のデプロイにはAWSアカウントと認証情報の設定が必要です。

## AWS CDKのメリットと注意点

主なメリットは次のとおりです。

- 少ないコードでインフラを定義でき、条件分岐・ループ・継承などプログラミングの機能をそのまま使える。
- インフラもコードレビュー・ユニットテスト・バージョン管理の対象にできる。
- IDEの補完や型チェックが効き、記述ミスを減らせる。
- 裏でCloudFormationが動くため、自動ロールバックやドリフト検出などの資産を活用できる。

一方で注意点もあります。CloudFormation経由でデプロイするため、APIを直接呼ぶツールよりデプロイがやや遅く、CloudFormationの制約も受けます。抽象化が進む分だけ実際に作られるリソースが見えにくくなるため、`cdk synth` や `cdk diff` で生成内容を確認する習慣が重要です。また、すべてのサービスにL2が用意されているわけではなく、その場合はL1で記述します。サーバーレス用途では、同じくCloudFormationをベースにした「[AWS SAMとは？サーバーレスアプリケーション開発における役割とメリット](/tech/details/3823/)」と比較検討するのもよいでしょう。

### AWS CDKが向いているケース・向かないケース

ツールの優劣は用途で決まります。判断の目安は次のとおりです。

- **向いているケース**：構築対象がAWSに閉じている／開発チームがTypeScriptやPythonなどに慣れている／環境ごとに設定を変える、繰り返しリソースを生成するなど、条件分岐やループで表現したい構成が多い。アプリケーションコードと同じ言語・同じリポジトリでインフラも管理したい場合は特に効果が大きい。
- **向かないケース**：AWSとAzure・Google Cloudなどを横断するマルチクラウド構成が前提（この場合はTerraformが有力）／チームにプログラミングの素養がなくテンプレートをそのまま管理したい／既存のCloudFormationテンプレート資産が大量にあり、当面それを使い続けたい。

なお、既存のCloudFormationスタックをCDKへ段階的に取り込むこともできるため、「まず一部のスタックだけCDK化する」といった部分導入から始めるのも現実的な選択肢です。

## 導入時のポイント

最初から大規模に作り込まず、小さなスタックで `init`〜`deploy` の流れを体験してから広げると失敗しにくくなります。共通のリソースや設定はConstruct単位でモジュール化して再利用し、変更前には必ず `cdk diff` で差分を確認します。IAMは最小権限を基本とし、テストコード（スナップショットテストやアサーション）を併用すると、デプロイ前に設定ミスを検出できます。複数アカウント・リージョンへ横展開する段階になったら、CloudFormation側の「[CloudFormation StackSetsとは何か](/tech/details/8400/)」もあわせて検討するとよいでしょう。

## よくある質問（FAQ）

### CDKとCKDは違いますか？

本記事のCDKはAWSのインフラ構築ツール「AWS CDK」です。医療分野の「CKD（慢性腎臓病）」とは無関係で、綴りが似ているだけの別物です。

### 学習にはどの言語が必要ですか？

TypeScriptが主流で情報量も豊富です。Python・Java・C#・Goでも利用でき、普段使っている言語を選べます。

### cdk bootstrapは毎回必要ですか？

いいえ。`cdk bootstrap` はAWSアカウントとリージョンの組み合わせごとに最初の一度だけ実行すれば十分です。CDKがデプロイ時に使うS3バケットなどの土台リソースを準備するコマンドで、同じアカウント・リージョンに2回目以降デプロイするときは再実行不要です。新しいリージョンを使い始めるときだけ、そのリージョンで改めて実行します。

### CloudFormationの知識は必須ですか？

宣言型IaCの概念が分かっていれば、深い知識がなくても始められます。ただし裏でCloudFormationが動くため、スタックやテンプレートの基礎を理解しておくとトラブル対応が楽になります。

### v1とv2のどちらを使うべきですか？

v2を使ってください。v1は2023年6月1日にサポートが終了しています。

### AWS CDKの利用に料金はかかりますか？

CDK自体は無料のオープンソースです。課金対象はCDKで作成したAWSリソースの利用料です。関連する内容として、[AWS Blocks](https://www.issoh.co.jp/tech/details/12663/)もご覧ください。

## 関連記事

- [AWS CloudFormationとは？テンプレートの書き方から使い方までわかりやすく解説](/tech/details/2927/)
- [AWS SAMとは？サーバーレスアプリケーション開発における役割とメリット](/tech/details/3823/)
- [CloudFormation StackSetsとは何か：マルチアカウント・リージョンのリソース展開を簡素化する仕組み](/tech/details/8400/)
- [HCP Terraformとは？旧Terraform Cloud（名称変更）の機能・料金とHCPでの位置づけを解説](/tech/details/3340/)
- [Terraformを用いた効率的なインフラコードの管理とバージョン管理](/tech/details/1900/)
- [CDK for Terraform（CDKTF）とは？提供終了後の移行判断を解説](https://www.issoh.co.jp/tech/details/16553/)
- [cdk bootstrapが作る5つのIAMロールとテンプレート版32の更新手順](https://www.issoh.co.jp/tech/details/17614/)：デプロイ前に必要な環境準備と権限の絞り込みを実装目線で確認したい場合に

---

出典: [AWS CDK（cdk）とは？仕組み・使い方とCloudFormation・Terraformとの違い](<https://www.issoh.co.jp/tech/details/3161/>)（株式会社一創）
