CDK

TypeScript や Python などのプログラミング言語で AWS インフラを定義する IaC フレームワーク

AWSIaC

CDK とは

AWS CDK (Cloud Development Kit) は、TypeScript、Python、Java などのプログラミング言語で AWS インフラを定義する IaC フレームワークである。YAML ではなくコードで記述するため、条件分岐、ループ、型チェック、IDE の補完が使える。

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 のレベル

レベル 説明
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 を使うべきケース

✅ 適する ❌ 適さない
複雑なインフラ (条件分岐、ループ) シンプルな Lambda + API
TypeScript チーム YAML に慣れたチーム
再利用可能な Construct を作りたい 小規模プロジェクト

CDK の背景や設計思想は関連書籍に詳しい。

関連用語