この記事はアイレット25卒社員によるAWSブログリレーのAWS CDK編です。
AWS CDKについて実装例を交えながら紹介をしたいと思います。
この記事は2025 Japan AWS Top Engineersのアジャイル事業部 第一開発セクション 小巻 玖美さんに監修していただきました。

[目次]

  1. AWS CDKの基本
  2. 基本的な構成要素
  3. CDKのデプロイまでの流れ
  4. CloudFormationとの関係性
  5. まとめ

1. AWS CDKの基本

AWS CDK(AWS Cloud Development Kit 以下、CDK)は、ネットワークやサーバといったインフラストラクチャの定義をして、AWS CloudFormationを通じてプロビジョニングするためのInfrastracture as Code(IaC)ツールです。
どんなツールなの?と言いますと、主に二つの部分から構成されます。

CDKの構成

  • AWS CDK コンストラクトライブラリ
  • AWSサービスを定義するための事前に準備されたコードの集まりのことです。
    この説明だけだとよくわからないですね。AWSにはさまざまなサービスがあり、それぞれ設定する項目がさまざまです。各サービスについて設定する項目をあらかじめコードで定義してくれたものが集まった箱だというイメージをもっていただければ良いと思います。

  • AWS CDK Toolkit
  • CDKにはSynthesis (合成)、deployなどを実行して、コードを読み取り、実際にAWS環境上へリソースを構築するための機能があります。その機能を使用するためのツールです。

    利点①

    使い慣れたプログラミング言語で開発可能
    AWS CDKはアプリケーションの開発でよく使われるプログラミング言語を使用することができるため、開発者が使い慣れている言語を選択して開発することができます。
    サポートされている言語は現在(2025/11/10)では以下の6つです。

    1. TypeScript
    2. JavaScript
    3. Python
    4. Java
    5. C#
    6. Go

    これらの中から、開発者が普段使い慣れている言語を選択して開発を行うことでき、
    条件分岐、ループ、継承などプログラミング的要素をそのまま使って開発ができます。

    利点②

    再利用性
    Constructをパッケージ化し、組織内で再利用可能なインフラモジュールとして共有できます。
    コンソール上でサービスの設定をぽちぽちやっていくと次に同じ設定を行う時に同じく時間がかかってしまいますし、人間の手で設定を行なっているためミスも多発しやすいです。
    コードでインフラサービスの定義を一度してしまえば、次に同じ設定のサービスを構築する時はコードを使い回すことができるため開発時間が短縮されます。

    2. 基本的な構成要素

    CDKの基本的な構成要素は以下の図のようにApp、Stack、Constructの3つに分かれます。

    出典:AWS CDK とは

    Appは1つ以上のStackが定義されたもので、StackはCloudFormationのスタックに相当します。Stackはデプロイ対象の最小単位で、Stackの中に複数のConstructが定義されています。コンストラクトは単一のAWSサービスや複数のサービスを組み合わせて定義したもので、S3やDynamoDBといったサービスの設定が定義されています。
    全サービス共通で使いたい変数(命名規則などで必ずリソースにiretをつけたい等)などはAppのところで定義してあげることで、定義した変数をStackやConstructのところで使うことができます。StackやConstruct単位で個別に定義したい場合はそれぞれのところで定義します。

    補足ですが、ConstructにはL1コンストラクトとL2コンストラクト、さらにL3コンストラクトという分類があります。数字が上がるにつれて抽象度が増していき定義する設定も変わっていきます。
    ここでは詳しく説明しませんがL1コンストラクトでは設定を細かく定義していきますが、L2、L3とあがっていくと定義しなくてもAWSのベストプラクティスに則って、よしなにリソースを自動的に作ってくれます。(いいところであり、意図しないリソースができるため注意しなければならないところでもあります。)
    ここで、L1とL2で定義したVPCの例を挙げておきます。

    ・L1コンストラクトで定義したVPC

    // vpcの作成
    const vpc = new ec2.CfnVPC(this, "Vpc", {
      cidrBlock: "10.0.0.0/16", // 適当な値
      enableDnsHostnames: true,
      enableDnsSupport: true,
      tags: [{ key: "Name", value: `hogehoge-vpc` }],
    });
    
    // サブネット作成
    const subnetPrivate1a = new ec2.CfnSubnet(this, "PrivateSubnet1a", {
      availabilityZone: "ap-northeast-1a",
      cidrBlock: "10.0.1.0/24", // 適当な値
      vpcId: vpc.ref,
      tags: [{ key: "Name", value: `hogehoge-subnet-private-a-01` }],
    });
    -------------以下略
    

    ・L2コンストラクトで定義したVPC

    const vpc = new ec2.Vpc(this, "MyProductionVPC", {
      // 必須パラメータ: CIDRブロック
      cidr: "10.0.0.0/16", // 適当な値
      maxAzs: 3, 
      natGateways: 1,
      subnetConfiguration: [
        {
          cidrMask: 24, // 各サブネット (例: 10.0.1.0/24, 10.0.2.0/24, ...のように順番にナンバリングされたものが作られる)
          name: "Public",
          subnetType: ec2.SubnetType.PUBLIC,
        },
        {
          cidrMask: 24,
          name: "Private",
          subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
        },
        {
          cidrMask: 24,
          name: "Isolated",
          subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
        },
      ],
      enableDnsHostnames: true,
      enableDnsSupport: true,
    });
    

    これを見るとぱっと見L2コンストラクトの方が記述が長くなっているように見えますが、L1コンストラクトはVPCに関係するリソース(NatGateway、subnet、routetableなど)一個一個定義していきます。L2だと上記のような記述をしてあげるだけで関係するリソースをよしなに作ってくれます。

    3. CDKデプロイまでの流れ

    CDKのはじめかたからデプロイまでの流れを見ていきます。
    前提:こちら(AWS CDK の開始方法)の設定とAWSアカウントの認証情報設定が済んでいる状態。

  • 手順
  • 以下、すべてターミナル上で実行(任意のディレクトリ下で)
    1. cdk init app –language [使用したい言語名] コマンドを実行
    このコマンドを実行することでコードを書くためのディレクトリやファイルを作ってくれます。実行後の初期ディレクトリ構造は次の画像の通りです。(TypeScriptを指定した例)
    このディレクトリ構造を保ったままであれば、libの下にディレクトリやファイルを自由に追加することが可能です。

    2. cdk bootstrapコマンドを実行
    実際のAWS環境へCDKデプロイするための前準備を行います。
    具体的には、CDKのプロジェクトファイルを保存するためのS3バケット、デプロイ実行に必要なIAMロールなどが作成されます。詳しくはこちら(What is the AWS CDK?)

    3. cdk synthコマンドを実行
    CloudFormationテンプレートを合成し、CDKデプロイの準備をします。定義したコンストラクトをStack単位でまとめてStackごとにCloudFormationのテンプレートに合成するといったことがおこなわれます。ここで、コードの書き方に間違いがあったりすると上手く合成されないためエラー文をよくみて修正していきましょう。

    4. cdk deployコマンドを実行
    実際にAWS環境上にリソースをデプロイします。リソースの設定項目に間違いがあったり、リソースの依存関係が解決できなかった場合は失敗します。リソースがデプロイされる順番は依存関係にあるリソースの依存先からになるため、依存関係にあるもの(VPCとRDSなど)はあらかじめコード内で明確にしておくことが大事です。

    補足情報: cdk diff で前回デプロイした時との差分を確認することができ、cdk destroyで構築したリソースを削除することができます。

    参考:チュートリアル: 最初の AWS CDK アプリを作成する

    4. CloudFormationとの関係性

    3章で記述したようにCDKはCloudFormationテンプレートを合成し、デプロイします。CloudFormationはそのテンプレートを元にどんな設定のどんなAWSサービスを提供するか管理します。ここで、設定値が間違っていたり、記述した設定の項目が解決できない場合はエラーとなり自動的にRollBack (前回の状態に戻す)をしてくれます。
    何もエラーがなければ実際にAWS環境上にサービスが構築され、実際に動くものができます。

    5. まとめ

    今回、CDKの基本的な概要とAWS環境上へデプロイする流れを見てきました。開発の準備はこれでできるかと思うので、実際にコードを書いてL1やL2のコンストラクトの違いなど実感してみてください!
    また、関連する記事として同じく25新卒社員がCloudFormationについて書いているのでぜひみてみてください!

    関連記事:https://iret.media/172404