2
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】DevTools布教活動CDK編【アドカレ2025】

2
Last updated at Posted at 2025-12-02

はじめに

この記事は Japan AWS Top Engineers Advent Calendar 2025 の 4 日目の記事です。

今回はIaCコードを書く際によく使われるAWS CDKについて記載します。
同じAWSのIaCツールであるloudFormationは何かしらのテキストエディタがあれば気軽に欠ける反面、コードが冗長になる課題があります。AWS CDKでは設定が少し難しいですが少ないコードで効率的にIaCコードを書くことができます。
今回の記事ではAWS CDKの環境構築とデプロイまでを解説しています。

↓ Japan AWS Top Engineers Advent Calendar 2025 はこちら

AWS CDK とは

インフラの構成をコード化したInfrastructure as Code (IaC) コードを作成するためのツールがAWS Cloud Development Kit (CDK)です。

IaCのメリット

手作業による設定ミスや繰り返し作業の工数削減

インフラ構成はAWSマネジメントコンソールを操作することでも定義可能です。しかし、同じ構成を繰り返し、すべて手作業で各サービスの設定を行うことは時間がかかり、設定ミスのリスクも毎回発生します。
インフラ構成をコード化することで、同じコードを繰り返し再利用でき、手作業による設定ミスや手間が省けます。

コード化による共有のしやすさ、バージョン管理

インフラ構成がコード化されることにより、コードのまとまりでチーム内で共有が可能になります。
また、バージョン管理ツールで管理することにより差分管理が容易になります。
さらに、コードに対して正しい定義がされているかのテストも可能になります。
↓ 大まかなイメージを絵にするとこんな感じになります
image.png

CloudFormationとCDKの違い

AWSのIaCツールと言えばCloudFormationもあります。
こちらは詳細な定義ができる反面、詳細であるがためにIaCコードが非常に長くなってしまいます。
それにより、コードを書く手間がかかり可読性が低下してしまう課題もあります。
CDKではコンストラクトによる抽象化を実現しています。抽象化により一部の定義を自動設定されることで、より少ない行数でIaCコードを作成することができます。

↓ 大まかなイメージを絵にするとこんな感じになります
image.png

AWS CDK の初期設定

プロジェクトの作成

プロジェクト用のフォルダを作成してそのフォルダ階層に移動します

mkdir my-project
cd my-project

AWS CDK プロジェクトの初期化のため「cdk init app」を実行します
今回はプログラミング言語にtypescriptを指定するため、オプションに「--language typescript」を指定しています

cdk init app --language typescript

image.png

AWS CDK による実装例

今回の検証環境
WindowsのPCでKiro(IDE)を利用しています。

API Gateway、Lambda、S3を使ったAPIを実装してみる

実装はAmazonQDeveloperやKiroでVibeコーディング

今回はKiroを使用して「APIGatewayとLambdaを使ったAPIを定義してください。Lambda関数はTypeScriptで記載してください。Lambda関数はS3バケット内のファイル一覧を返すようにしてください」と依頼分を出して実装してもらいました。
その後、S3バケット名やLambda関数名をKiroとチャットで相談しながら修正しつつ実装を進めました。

実装内容

フォルダ構成

lambdaフォルダ内にLambda関数のプログラムが作成され、libフォルダ内にCDKのIaCコードが作成されます。
image.png

libフォルダ

スタックの定義はこのフォルダのファイルに行います。

インポート、クラス、コンストラクト

スタックに必要なモジュールをインポートしています。
クラス名とコンストラクタが定義され、これ以降の行から各リソースの定義がされています。
image.png

S3バケットの定義

S3バケットの定義は以下の3つの内容が定義されています。

  • bucketName: 固定のバケット名
    • バケット名を指定していない場合は「myprojectstack-mybucket<ランダム文字列>-<ランダム文字列>」という形で自動的に名前が付けられます。
  • removalPolicy: DESTROY: スタック削除時にバケットも削除
  • autoDeleteObjects: true: バケット内にファイルがあっても削除可能

image.png

Lambda関数の定義

Lambda関数の定義は以下の5つの内容が定義されています。

  • functionName: 固定の関数名
    • 関数名を指定していない場合は「MyProjectStack-ListFilesFunction<ランダム文字列>-<ランダム文字列>
      」という形で自動的に名前が付けられます。
  • runtime: Node.js 20.x を使用
  • handler: index.jsのhandler関数を実行
  • code: lambda/ディレクトリのコードを使用
  • environment: バケット名を環境変数として渡す

image.png

今回のLambda関数はS3バケット内のファイル一覧を取得するため、S3バケットの読み取り権限を付与します
image.png

APIGatewayの定義

今回のAPI GatewayはLambda関数をGETメソッドで呼び出す定義をしています
image.png

その他、デプロイ完了時のアウトプット内容

デプロイ完了時にバケット名とAPIのURLを表示するようにしています
image.png

デプロイ準備

ビルド(TypeScriptのコンパイル)

今回はTypeScriptでCDKアプリケーションを作成しているので、以下のコマンドでコンパイルを行います。

npm run build

この時、以下の図のようにインポートの内容でエラーが出た場合は依存関係の解決がまだできていません
image.png
以下のコマンドを実行して依存関係を解決してから再度ビルドしてください。

cd lambda
npm install

エラー無くビルドが完了したことを確認します
image.png

CloudFormationテンプレート生成(推奨)

デプロイ時に自動で行われるため必須の手順ではありませんが、以下コマンドを実行することでCDKのコードからCloudFormationテンプレートを生成できます。

npx cdk synth

デフォルトではjson形式でコンソール上に結果が表示されますが、例えばyaml形式でファイルとして保存したい場合は以下のようなコマンドを実行してください

npx cdk synth --yaml > template.yaml

出力されたCloudFormationテンプレートは以下のように428行のファイルになっています。
libフォルダ内のCDKのコード(TypeScript)は58行だったのでかなりの行数が省略できており、可読性の高いコードだったことがわかります。
image.png

デプロイ

認証情報を設定

AWS環境にデプロイを行うために認証情報を設定します。
認証情報はアクセスポータルの画面から「AWS Access Key ID」「AWS Secret Access Key」を確認して、以下のコマンド実行後に求められる変数に設定します。

aws configure

Bootstrap(初回のみ)

npx cdk bootstrap

認証エラーになる場合
もしaws configureの設定でうまくいかない場合は、以下のパスのファイルに「AWS Access Key ID」「AWS Secret Access Key」「AWSセッショントークン」を設定して再度Bootstrapコマンドを実行してください

C:\Users\【ユーザー名】\.aws\credentials

image.png

BootStrapが成功すると、CDKの初期設定のS3バケットとCloudFormationスタックが作成されます。
image.png
image.png

デプロイ実行

以下のコマンドを実行します

npx cdk deploy

デプロイ内容の確認が表視されるので、内容に問題がなければ[y]を入力して承認します
image.png

AWSコンソールでデプロイ結果確認

デプロイが完了するとデプロイしたCloudFormationのコンソール画面でスタックが確認できます
image.png
CloudFormationテンプレートをInfrastructureComposerで確認しましたが、CDKで定義した内容が反映されていることが確認できます。
image.png

デプロイ内容の削除

デプロイした内容をAWS環境から削除したい場合はcdk destroyを実行します

npx cdk destroy

確認のメッセージに対して[y]を入力すると削除が行われます。
削除されるとでデプロイしたプロジェクトが削除されますが、Bootstrapによって生成されたS3バケットとスタックは削除されません。
image.png

参考

↓ AWS CDK の公式ドキュメント

↓ AWS CDK のBlackBelt資料(日本語)

2
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
2
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?