AWS CDK 解説

作成日: 2025年3月23日

AWS CDKとは

  • AWS Cloud Development Kitのことで、プログラミング言語を使用してクラウドリソースを定義するフレームワーク
  • TypeScript、JavaScript、Python、Java、C#、Goなどのプログラミング言語をサポート
  • 学習リソース:AWS Black Belt Online Seminar、ワークショップなど多数
使い慣れたプログラミング言語で
インフラをコードとして
定義できるよ!

導入のメリット

  • 型安全性によるコンパイル時のエラー検出
  • コード再利用によるベストプラクティスの標準化と品質向上
  • 開発生産性向上:IDE補完、条件分岐、ループなどの活用
  • インフラとアプリの統合:同一リポジトリで一元管理
  • スケーリングとガバナンス:複数環境・リージョンへの展開が容易
CloudFormationより
少ないコードで
同じ環境を構築できる!

AWS CDKの構成要素

  • App:最上位層でスタックの依存関係を定義
  • Stack:CloudFormationのスタック1つに対応
  • Construct:スタックにリソース定義を作成
  • Constructのレベル:
    • L1:CloudFormationリソースと1:1対応(Cfnプレフィックス)
    • L2:より高いレベルの抽象化(ボイラープレートコード削減)
    • L3:Patterns、複数リソースを組み合わせた実装
L2 Constructがおすすめ!
自動的にリソースを生成して
コード量を削減できるよ

CDKコマンド

  • cdk init:必要なファイルをセットアップ
  • cdk bootstrap:CDK利用に必要なリソースを作成
  • cdk deploy:リソースをAWS環境にデプロイ
  • cdk diff:現在のコードとデプロイ済み環境の差分確認
  • cdk synth:CloudFormationテンプレートを生成
  • cdk destroy:スタックを削除
  • cdk list / cdk ls:アプリのスタック一覧を表示

開発方法

  • 必要な知識:AWSリソース基礎知識、CloudFormation経験、プログラミング経験
  • 必要な環境:AWS CLI v2、Node.js、テキストエディタ(IDE推奨)
  • ディレクトリ構造:stacks、resources、utils、parametersなどに分離
  • スタック分割:極力単一スタックで管理(クロススタック参照は複雑化)
  • Construct ID命名規則:PascalCase、シンプルな名前を推奨
スタック分割は慎重に!
リソース間の依存関係で
デッドロックが発生するかも!

テスト方法

  • Snapshot Test:前回生成されたテンプレートとの差分チェック
  • Unit Test:Jestを使ったリソース単位のテスト
  • テスト記述例:
test("create the vpc", () => {
  // GIVEN
  const app = new App();
  const stack = new VPCStack(app, "testing-vpc", {});
  // WHEN
  const template = Template.fromStack(stack);
  // THEN
  template.resourceCountIs("AWS::EC2::VPC", 1);
  template.hasResourceProperties("AWS::EC2::VPC", {
    CidrBlock: "10.0.0.0/16",
  });
});

実用Tips

  • 共通タグ付与:Tags.of(app).add('Key', 'Value')
  • 動的パラメータ:-c key=valueで指定、app.node.tryGetContext('key')で取得
  • 本番環境保護:注意喚起メッセージ、terminationProtection: true
  • リージョン指定:defaultEnv変数で管理
  • プロファイル命名:環境識別子とプロファイル名の一致で誤操作防止
package.jsonにコマンドを
事前定義しておくと便利!
npm run cdk:deploy:all

cdk-nag

  • cdk-nag:セキュリティとコンプライアンス強化のための静的解析ツール
  • Rules Pack:AWS Solutions、HIPAA、NIST、PCIなど多数のルールセット
  • 実装例:
// App定義に追加
import { AwsSolutionsChecks } from "cdk-nag";
const app = new cdk.App();
cdk.Aspects.of(app).add(new AwsSolutionsChecks());
  • エラー抑止:NagSuppressionsで特定ルールを除外可能
  • カスタムルール:NagPackを拡張して独自ルールを追加可能
cdk-nagを使えば
セキュリティベストプラクティスを
自動チェックできるよ!

CDK v2の特徴

  • 単一パッケージ化:aws-cdk-libに統合されたライブラリ
  • v1との違い:
// CDK v1
npm install @aws-cdk/aws-lambda
npm install @aws-cdk/aws-s3
// ...other packages

// CDK v2
npm install aws-cdk-lib
  • 分離の動き:2025年2月から、AWS CDK CLIとCDKコンストラクトライブラリが分離
  • CLIは2.1000.0から新しいバージョン体系に
最新の動向に注意!
package.jsonの依存関係管理が
変わるかも!