CDK
TypeScript や Python などのプログラミング言語で AWS インフラを定義する IaC フレームワーク
CDK とは
AWS CDK (Cloud Development Kit) は、TypeScript、Python、Java などのプログラミング言語で AWS インフラを定義する IaC フレームワークである。YAML ではなくコードで記述するため、条件分岐、ループ、型チェック、IDE の補完が使える。
SAM / Terraform との比較
SAM / Terraform との主な違いを以下に比較する。
| 観点 | CDK | SAM | Terraform |
|---|---|---|---|
| 言語 | TypeScript, Python 等 | YAML | HCL |
| 対象 | AWS 全般 | サーバーレス | マルチクラウド |
| 抽象度 | 高い (L2/L3 Construct) | 中程度 | 低い |
| 学習コスト | 中程度 | 低い | 中程度 |
| 出力 | CloudFormation | CloudFormation | tfstate |
基本的な使い方
基本的な使い方のコード例を示す。
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class MyStack extends cdk.Stack {
constructor(scope: cdk.App, id: string) {
super(scope, id);
const table = new dynamodb.Table(this, 'Users', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});
const fn = new lambda.Function(this, 'GetUser', {
runtime: lambda.Runtime.NODEJS_22_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
environment: { TABLE_NAME: table.tableName },
});
table.grantReadData(fn); // IAM ポリシーを自動生成
new apigateway.LambdaRestApi(this, 'Api', { handler: fn });
}
}
Construct のレベル
Construct のレベルを以下にまとめる。
| レベル | 説明 | 例 |
|---|---|---|
| L1 | CloudFormation リソースの 1:1 マッピング | CfnBucket |
| L2 | ベストプラクティスが組み込まれた抽象化 | Bucket, Function |
| L3 | 複数リソースのパターン | LambdaRestApi |
コマンド
コマンドの例を示す。
cdk init app --language typescript
cdk synth # CloudFormation テンプレートを生成
cdk diff # 変更の差分を表示
cdk deploy # デプロイ
cdk destroy # 削除
CDK を使うべきケース
CDK を使うべきケースを以下に示す。
| 適する場面 | 適さない場面 |
|---|---|
| 複雑なインフラ (条件分岐、ループ) | シンプルな Lambda + API |
| TypeScript チーム | YAML に慣れたチーム |
| 再利用可能な Construct を作りたい | 小規模プロジェクト |
CDK の背景や設計思想は関連書籍に詳しい。
この記事は役に立ちましたか?
関連用語
AWS SAM
AWS のサーバーレスアプリケーションを定義 / デプロイするためのフレームワーク
Terraform
HashiCorp の IaC ツールで、マルチクラウドのインフラをコードで宣言的に管理する
Terraform State
Terraform がインフラの現在の状態を管理するファイルとリモートバックエンド
REST 成熟度モデル
Leonard Richardson が定義した REST API の成熟度を 4 段階で評価するモデル
Infrastructure as Code
インフラの構成をコードで定義し、バージョン管理 / 自動化 / 再現性を実現する手法
Null 安全性
null 参照エラーを型システムで防止し、null の可能性がある値を明示的に扱うプログラミング言語の機能
関連する記事
設計 / アーキテクチャ本ガイド - 設計力を上げる技術書の選び方
ソフトウェア設計を学べる技術書をコード / モジュール / システムの 3 レイヤーに分類し、レベルに応じた読む順番の指針を紹介します。
Python 本の選び方 - 独学の最初の 1 冊から実務品質まで
Python 本の選び方を「動機」から逆算して整理。プログラミング未経験の最初の 1 冊、業務自動化に直結する本、型ヒントとコード品質で実務水準へ進む本まで、2026 年 8 月時点の定番を独学ルートに沿って解説します。
技術書のタイトルに隠された法則 - 「入門」「実践」「詳解」の意味を読み解く
技術書のタイトルに使われる「入門」「実践」「詳解」などのキーワードには暗黙のルールがあります。タイトルだけで本のレベルと内容を見抜くコツを紹介します。