0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CDK をざっくり理解する!

Last updated at Posted at 2025-03-18

はじめに

AWS CDK(Cloud Development Kit)とは、AWSのインフラをコードで管理・定義できるフレームワークです。

CloudFormationと連携して動作し、インフラ構築をプログラミング言語で記述できます🤗

先日、実務で初めてCDKコードの改修をしたので色々とメモしておきます。

目次

  1. AWS CDKの特徴
  2. CDKの基本構成
  3. CDKの簡単な例
  4. CDKのメリット
  5. CDKとCloudFormationの違い
  6. npx cdk synth と cdk diff
  7. まとめ
  8. 参考文献

🧷 AWS CDKの特徴

1. インフラをコードで管理(IaC)

  • 従来は、AWSのインフラを構築するためにコンソールで手動設定したり、CloudFormationでYAML/JSONのテンプレートを書いていました。
  • CDKでは、TypeScript, Python, Java, C#, Goなどのプログラミング言語でインフラを定義できるため、コードの再利用性や可読性が高まります。

2. CloudFormationと連携

  • CDKは内部的にCloudFormationテンプレートを生成し、それをデプロイします。
  • そのため、CDKで記述したコードはCloudFormationで実行される形になります。

3. 高レベルコンストラクト

  • CDKではインフラを「コンストラクト」という単位で定義します。
  • 例えば、EC2インスタンスやS3バケットを1行のコードで作成できます。
  • 高レベルのコンストラクトはベストプラクティスを内包しているため、安全かつ効率的にリソースを定義できます。

🧷 CDKの基本構成

CDKのプロジェクトは以下のような構成になります。

my-cdk-app/
 ├── bin/              → エントリーポイント
 │     └── my-cdk-app.ts
 ├── lib/              → インフラを定義するコード
 │     └── my-cdk-app-stack.ts
 ├── cdk.json          → CDKの設定ファイル
 ├── package.json      → Node.jsの依存関係管理
 ├── README.md
 └── .gitignore

💡 主要なファイル

bin/my-cdk-app.ts

  • CDKアプリケーションのエントリーポイント
  • ここでスタックを作成してアプリを実行します。

lib/my-cdk-app-stack.ts

  • インフラ構成を記述する場所

cdk.json

  • CDKコマンドが使う設定ファイル

🧷 CDKの簡単な例

たとえば、S3バケットを作成するCDKコード(TypeScript)を見てみましょう!

① CDKプロジェクトの作成

# CDKのインストール
npm install -g aws-cdk

# 新規プロジェクト作成
cdk init app --language typescript

② インフラを定義

lib/my-cdk-app-stack.ts を編集します

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';

export class MyCdkAppStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // S3バケットの作成
    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true, // バージョニング有効
      removalPolicy: cdk.RemovalPolicy.DESTROY, // 削除時にリソースも削除
      autoDeleteObjects: true
    });
  }
}

③ デプロイ

# デプロイ前にビルド(TypeScriptの場合)
npm run build

# CDKデプロイ
cdk deploy

これでAWS上にS3バケットが作成されます!✨

🧷 CDKのメリット

✅ コードでインフラ管理

TypeScriptやPythonなど、慣れた言語でインフラ構築できる
条件分岐やループなど、コードの柔軟性を活かせる

✅ 再利用性とモジュール化

コンストラクトを再利用できるので、コードの重複が減る
カスタムコンストラクトを作成してモジュール化も可能

✅ CI/CDと連携しやすい

GitHub ActionsやCodePipelineと連携することで、自動デプロイが容易

🧷 CDKとCloudFormationの違い

項目 AWS CDK CloudFormation
言語 TypeScript, Python, etc. YAML / JSON
開発速度 高速(プログラム的に記述) やや遅い(静的テンプレート)
メンテナンス性 高い(コードの再利用可) 低い
ベストプラクティス 組み込みコンストラクト有り 手動で対応が必要

🧷 npx cdk synth と cdk diff

AWS CDK(Cloud Development Kit)を使っていると、 npx cdk synthcdk diff はよく使うコマンドなので、それぞれの役割についてもついでに記載しておきます😊

1. npx cdk synth(CDKのテンプレートを生成する)

🔹 役割

cdk synth(synthesize の略)は、CDKのコード(TypeScript, Python, Javaなど)をCloudFormationテンプレートに変換する コマンドです。

🔹 実行方法

npx cdk synth
 または
cdk synth(npxをつけると、ローカルにCDKがインストールされてなくても実行できる)

🔹 実行結果

コマンドを実行すると、CDKのコードからCloudFormationのYAMLまたはJSONテンプレートが生成され、ターミナルに表示されます。
例えば、TypeScriptで以下のようなCDKコードがあるとします。

import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

const app = new cdk.App();
const stack = new cdk.Stack(app, "MyStack");

new ec2.Instance(stack, "MyInstance", {
  instanceType: new ec2.InstanceType("t2.micro"),
  machineImage: ec2.MachineImage.latestAmazonLinux(),
}); // npx cdk synthを実行すると、CloudFormationのテンプレートが出力されます。

Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-12345678

🔹 使う場面

  • デプロイ前にCloudFormationテンプレートを確認したい時
  • 生成されたテンプレートを手動で修正・利用したい時
    Infrastructure Composerでインフラ構成をGUI的に見たい時等に利用。
  • CDKのコードが正しく変換されているかチェックしたい時

2. cdk diff(CDKの変更点を確認する)

🔹 役割

cdk diff は、現在のスタックとデプロイ予定の変更点を比較する コマンドです。
CloudFormationの change set に似ています。

🔹 実行方法

npx cdk diff

🔹 実行結果

例えば、以下のような変更を加えたとします。

  • 変更前: t2.micro のEC2インスタンス
  • 変更後: t3.micro へ変更

この状態で cdk diff を実行すると、以下のように変更点が表示されます。

Resources
[~] AWS::EC2::Instance MyInstance MyInstance
 ├─ [~] InstanceType
 │   ├─ [-] t2.micro
 │   └─ [+] t3.micro

🔹 使う場面

  • 本番環境の変更前に影響を確認したい時
  • デプロイ前に予期しない変更がないかチェックしたい時
  • 複数人でCDKを開発していて、変更の差分を共有したい時

3. cdk synth と cdk diff の違い

  • cdk synth:CDKコードをCloudFormationテンプレート(YAML/JSON)に変換
  • cdk diff:変更前後の差分に関する比較変更点をリスト化(追加・変更・削除)

4. cdk deploy の流れの中での役割

  1. CDKコードを書く
  2. cdk synth でCloudFormationテンプレートを確認
  3. cdk diff で変更点を確認
  4. cdk deploy で実際にデプロイ

CDKの開発フローをスムーズに進めるために、ぜひ活用してください! 🚀

🎉 まとめ

✅ AWS CDKは、従来のCloudFormationよりもシンプルかつ効率的にインフラを構築できるツール。
✅ コードの再利用やCI/CD連携にも強く、クラウド開発を高速化できる。
npx cdk synth:CDKコードをCloudFormationテンプレートに変換
cdk diff:変更前後の差分を比較
✅ デプロイ前に synth でテンプレートを確認し、diff で影響をチェックするのがベストプラクティス!

✨ 次のステップ

  • 実際にLambdaやAPI Gatewayを組み合わせた構成に挑戦する
  • CDK PipelinesでCI/CDを自動化する

使いこなせるとめちゃくちゃ便利っす!😎

💫 参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?