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 がインフラの現在の状態を管理するファイルとリモートバックエンド
CloudFormation
AWS のインフラをテンプレート (YAML/JSON) で宣言的に定義・管理する IaC サービス
Infrastructure as Code
インフラの構成をコードで定義し、バージョン管理・自動化・再現性を実現する手法
REST 成熟度モデル
Leonard Richardson が定義した REST API の成熟度を 4 段階で評価するモデル
関連する記事
技術書のタイトルに隠された法則 - 「入門」「実践」「詳解」の意味を読み解く
技術書のタイトルに使われる「入門」「実践」「詳解」などのキーワードには暗黙のルールがあります。タイトルだけで本のレベルと内容を見抜くコツを紹介します。
Web 開発本ガイド - フロントエンドからバックエンドまで
Web 開発の全体像を学べる技術書の選び方と学習マップを紹介。フレームワーク本の賞味期限問題と公式ドキュメントとの使い分けも解説します。
技術書のアウトプット術 - 読んだ本の価値を 10 倍にする方法
技術書を読んだ後のアウトプット方法を負担の少ないものから 5 段階で紹介。アウトプットが記憶の定着を劇的に改善する理由も解説します。