1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# 初めてのCDK開発について - 学習の進め方と実践のポイント

Last updated at Posted at 2025-12-12

はじめに

この記事では、私が初めてAWS CDKに取り組んだ際の学習プロセスと、実践を通じて得た知見を共有します。
「何から始めればいいかわからない」「どう学習を進めればいいか迷っている」という方の参考になれば幸いです。

想定読者

  • AWSの基本的なサービス(Lambda、S3など)を触ったことがある方
  • Infrastructure as Codeに興味がある方
  • CDKでの開発を始めようと考えている方

CDKとは - なぜCDKを選んだのか

Infrastructure as Codeの必要性

手動でのAWSリソース構築には限界があります。再現性やバージョン管理、チーム開発を考えると、コードでインフラを管理した方が断然楽だと感じました。

CDKの特徴

  • プログラミング言語(TypeScript、Python等)で書ける
  • 型安全性があるので、間違いに気づきやすい
  • 普段使ってるライブラリやツールがそのまま使える

私がCDKを選んだ理由

  • TypeScriptでの開発経験を活かせる
  • VSCodeの補完が効くので開発しやすそう
  • if文やforループが普通に書けるので、複雑な処理も書きやすい
  • 今後プロジェクトで使う機会が増えそうだったから

学習の進め方

ステップ1: 基礎概念の理解(1週間程度)

まずは基本的な用語から理解していきました。CloudFormationを知ってたので、概念自体はすんなり入ってきた感じです。

重要な用語

  • App: CDKアプリケーション全体のこと
  • Stack: デプロイの単位。CloudFormationスタックと同じイメージ
  • Construct: 再利用可能なコンポーネント。L1、L2、L3の3つのレベルがある

推奨学習リソース

  • AWS公式ドキュメント「CDK Workshop」
  • AWS CDK API Reference
  • 公式GitHubのサンプルコード
  • Udemy

この段階でやったこと

とにかく公式ドキュメントを読んで、気になった用語はメモしてました。完璧に理解しようとせず、「こういうものがあるんだな」くらいの感覚で進めたのが良かったと思います。

ステップ2: 小さく始める(2週間程度)

いきなり複雑なものを作ろうとすると確実に挫折するので、まずは本当にシンプルなリソースから始めました。

最初に作ったもの

  1. S3バケット単体
  2. Lambda関数単体
  3. Lambda + API Gatewayの簡単な構成
// 最初に書いたシンプルなStack例
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';

export class MyFirstStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    
    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true,
      removalPolicy: cdk.RemovalPolicy.DESTROY,
    });
  }
}

ステップ3: 実践的な構成に挑戦(1ヶ月程度)

基礎が固まってきたら、もう少し実用的な構成を作ってみました。

取り組んだこと

  • Lambda + API Gateway + DynamoDBの構成
  • CloudFront + S3によるWebサイト配信
  • 複数のStackに分割する設計

つまずいたポイント

  • IAMロールとポリシーの設定

    • 最小権限の原則をどう実装するか
    • Lambda実行ロールの適切な権限設定
  • リソース間の依存関係

    • Stack間でリソースを参照する方法
    • cdk.CfnOutputの使い方
  • 命名規則の重要性

    • 後から変更が難しいリソース名
    • 環境別の命名戦略
// Stack間でリソースを共有する例
export class NetworkStack extends cdk.Stack {
  public readonly vpc: ec2.Vpc;
  
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    this.vpc = new ec2.Vpc(this, 'VPC');
  }
}

export class ApplicationStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, networkStack: NetworkStack, props?: cdk.StackProps) {
    super(scope, id, props);
    // networkStack.vpcを利用
  }
}

効果的な学習方法

ドキュメントの読み方

最初から完璧に理解しようとすると疲れます。流し読みして、必要になったら深く読む、くらいのスタンスで良いと思います。Construct Libraryのリファレンスは開発中に何度も見ることになるので、ブックマークしておくと便利です。

試行錯誤のサイクル

  1. 「こう書けば動くはず」と仮説を立てる
  2. コードを書く
  3. デプロイして確認
  4. エラーが出たら原因を調べる
  5. 修正してまたデプロイ

アウトプットの重要性

  • 学んだことをメモに残す
  • チーム内で知見を共有する

つまずきやすいポイントと対策

IAM権限周り

問題: どの権限を与えればいいかわからない

対策:

  • 最初は広めの権限で動作確認
  • CloudTrailで実際に使用された権限を確認
  • 段階的に最小権限に絞り込む

デプロイエラー

問題: エラーメッセージが分かりにくい

対策:

  • CloudFormationのイベントログを確認
  • cdk diffで変更内容を事前確認
  • cdk synthで生成されるテンプレートを確認

リソースの削除

問題: Stackが削除できない

対策:

  • removalPolicyを適切に設定
  • S3バケットなど、中身があると削除できないリソースに注意
  • 開発環境ではDESTROY、本番環境ではRETAINを使い分け

環境の切り替え

問題: 開発環境と本番環境の管理

対策:

  • 環境変数やスタックをまとめたファイルを活用
  • Stackのpropsで環境を渡す
  • 環境別の設定ファイルを用意
// 環境別の設定例
const envConfig = {
  dev: { instanceType: 't3.micro' },
  prod: { instanceType: 't3.large' },
};

const env = app.node.tryGetContext('env') || 'dev';
const config = envConfig[env];

これから始める方へのアドバイス

最初にやるといいこと

  1. AWS公式のCDK Workshopを一通りやってみる
  2. TypeScript(または好きな言語)で小さいリソースを作る
  3. デプロイと削除を繰り返して、操作に慣れる
  4. 複雑なシステムを見る時は、最初はファイル構成とクラス名だけ眺めて全体像を把握する

やらない方がいいこと

  • 最初から複雑な構成を作ろうとする
  • ドキュメントを読まずにコピペで進める

役立つリソース

  • AWS CDK Examples(GitHub)
  • CDK Patterns(cdkpatterns.com)
  • AWS公式ブログのCDK関連記事

まとめ

得られたこと

  • インフラ構築の再現性と効率化
  • チーム開発でのコード管理
  • TypeScriptの型安全性による開発体験の向上

今後の展開

  • より高度なConstructの作成
  • CI/CDパイプラインとの統合
  • 複雑なスタック

正直、まだまだ分からないことだらけです。でも、一歩ずつ進めていけば確実にできるようになります。
自分もまだまだ未熟ですが、この記事がこれからCDKを始める方の参考になれば嬉しいです。

参考リンク

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?