CDK

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

AWSIaC
CDK」の技術書を見る (20 冊) →

CDK とは

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

SAM / Terraform との比較

SAM / Terraform との主な違いを以下に比較する。

観点CDKSAMTerraform
言語TypeScript, Python 等YAMLHCL
対象AWS 全般サーバーレスマルチクラウド
抽象度高い (L2/L3 Construct)中程度低い
学習コスト中程度低い中程度
出力CloudFormationCloudFormationtfstate

基本的な使い方

基本的な使い方のコード例を示す。

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 のレベルを以下にまとめる。

レベル説明
L1CloudFormation リソースの 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 の背景や設計思想は関連書籍に詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事