[初心者向け]AWS CDK触ってみた!S3バケットをコード化してデプロイしてみた編

[初心者向け]AWS CDK触ってみた!S3バケットをコード化してデプロイしてみた編

Clock Icon2025.05.09

こんにちは!前越です。

前回の記事「[初心者向け]AWS CDK触ってみた!環境構築編」では、AWS CDK (Cloud Development Kit) を使うための準備を整えました。
皆さん、CDK環境のセットアップは無事に完了しましたか?

今回はその続きとして、いよいよ AWS CDK を使って実際にAWSリソースを作成 していきます!

今回やること

AWS CDK を利用して、最も基本的なストレージサービスの一つである S3 バケット を TypeScript で定義し、AWS 環境にデプロイします。
具体的には、以下のステップで進めていきます。

  1. CDKプロジェクトの初期化
  2. S3バケットを定義するコードの記述
  3. CDKコマンドによるデプロイ
  4. デプロイ結果の確認
  5. リソースの削除

S3バケットはシンプルながら非常に多くの用途で使われるため、CDKの最初のステップとして学ぶには最適です ✨

事前準備

前回の記事で解説した以下の環境が構築されていることを前提とします。

  • Node.js (npm 含む)
  • AWS CLI (認証情報設定済み)
  • AWS CDK (グローバルインストール済み)
  • CDKブートストラップ (実行済み)

まだの方は、ぜひ前回の記事を参考に準備を済ませてくださいね!

やってみる

1. CDKプロジェクトの初期化

まずは、CDKプロジェクト用のディレクトリを作成し、その中でCDKプロジェクトを初期化します。

mkdir my-cdk-s3-project
cd my-cdk-s3-project
cdk init app --language typescript

cdk init app --language typescript コマンドを実行すると、TypeScript を使ったCDKアプリケーションの雛形が生成されます。

スクリーンショット 2025-05-09 14.31.01

無事 \ ✅ All done! /と表示されれば成功です。

プロジェクトのディレクトリ構造は以下のようになります(主要なもののみ抜粋)。

.
├── bin/
│   └── my-cdk-s3-project.ts  # CDKアプリケーションのエントリーポイント
├── lib/
│   └── my-cdk-s3-project-stack.ts # メインのスタック定義ファイル
├── package.json
├── tsconfig.json
└── cdk.json

bin/my-cdk-s3-project.ts: CDKアプリケーションのエントリーポイントです。
ここで lib/ ディレクトリ内のスタックをインスタンス化します。

lib/my-cdk-s3-project-stack.ts: ここにAWSリソースを定義するコードを記述していきます。今回の主役です!

2. S3バケットを定義するコードの記述

それでは、lib/my-cdk-s3-project-stack.ts ファイルを編集して、S3バケットを作成するコードを記述しましょう。

エディタで lib/my-cdk-s3-project-stack.ts を開いて、以下のように編集します。

lib/my-cdk-s3-project-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3'; // S3モジュールをインポート

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

    // S3バケットを作成する
    new s3.Bucket(this, 'MyFirstCdkBucket', {
      // バケット名はCDKがユニークな名前を自動生成しますが、
      // 明示的に指定したい場合は bucketName プロパティを使用します。
      // ただし、バケット名はグローバルでユニークである必要があるため注意が必要です。
      bucketName: 'cdk-s3-for-maegoshi',

      versioned: true, // バージョニングを有効にする
      removalPolicy: cdk.RemovalPolicy.DESTROY, // スタック削除時にバケットも削除する (開発時向け)
      autoDeleteObjects: true, // スタック削除時にバケット内のオブジェクトも自動削除する (開発時向け)
    });
  }
}

3. CDKコマンドの実行

コードが書けたら、いよいよCDKコマンドを使ってAWS環境に反映させていきましょう!

  • cdk synth (シンセサイズ)
    まず、cdk synth コマンドを実行します。これは、記述したTypeScriptコードをAWS CloudFormationテンプレートに変換するコマンドです。
cdk synth

実行すると、CloudFormationテンプレート (YAML形式) が標準出力に表示されます。
ここでエラーが出なければ、コードの構文は問題ないということです。

  • cdk deploy (デプロイ)
    いよいよデプロイです! cdk deploy コマンドを実行すると、CloudFormationを通じてAWS環境にリソースが作成(または更新)されます。
cdk deploy

スクリーンショット 2025-05-09 16.05.31
✅ MyCdkS3ProjectStack のようなメッセージが表示されればデプロイ成功です!🎉

4. デプロイ結果の確認

S3バケットが作成されたか、AWSマネジメントコンソールで確認してみましょう。

  1. AWSマネジメントコンソールにログインします。
  2. サービス検索で「S3」と入力し、S3の管理画面に移動します。
  3. バケット一覧に、CDKが作成したバケットが表示されているはずです!
    スクリーンショット 2025-05-09 15.23.27

また、CloudFormationの管理画面も確認してみましょう。

  1. サービス検索で「CloudFormation」と入力し、CloudFormationの管理画面に移動します。
  2. スタック一覧に MyCdkS3ProjectStack という名前のスタックが作成され、ステータスが CREATE_COMPLETE になっていることを確認できます。

スクリーンショット 2025-05-09 16.27.53

これで、CDKを使ってコードからS3バケットをプロビジョニングできました!

  1. スタック一覧に MyCdkS3ProjectStack という名前のスタックが作成され、ステータスが CREATE_COMPLETE になっていることを確認できます。

5. リソースの削除

作成したリソースを削除するのも簡単です。cdk destroy コマンドを実行します。

cdk destroy

確認のプロンプトが表示されるので、y を入力して進めます。

スクリーンショット 2025-05-09 16.57.31

これにより、CloudFormationスタックが削除され、設定したS3バケットも一緒に削除されます。

まとめ

今回は、AWS CDK と TypeScript を使って S3 バケットを作成し、デプロイ、そして削除するまでの一連の流れを体験しました。

マネジメントコンソールでポチポチ操作する方が簡単なのでは?」と思っていた方もいるかもしれません。確かに、最初の環境構築には少し手間がかかる部分もあります。

しかし、一度環境ができてしまえば、数行のコードといくつかのコマンドだけで、AWS上にリソースを確実に、そして何度でも同じようにプロビジョニングできる 手軽さと強力さを感じていただけたのではないでしょうか。

ぜひ皆さんも、まずは簡単なリソース作成からAWS CDKに触れてみてください!

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新ITテクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.