はじめに
最近、毎回手動で作るAWS Serverlessアーキテクチャに疲れて、「何度も同じことを繰り返すのはもうやめよう」と思い立ち、再利用可能なCDKテンプレートを作りました。
このテンプレートのおかげで、新しいプロジェクトを始めるたびに「Lambda + API Gateway + DynamoDB + S3 + CloudFront」を一から書く必要がなくなり、爆速でプロダクション品質のバックエンドを立ち上げられるようになりました。
この記事では、テンプレートの概要と、なぜ作ってよかったのか、今後の活用方法などをまとめてみました。
作ったもの:Serverless Web App CDK Template
以下のようなAWS構成を一発でデプロイできるテンプレートを作りました。
-
Lambda + API Gateway(REST API)
-
DynamoDB or Aurora Serverless(選択可能なデータベース)
-
S3 + CloudFront(静的ホスティング + CDN)
-
CloudWatch + X-Ray(監視とトレーシング)
-
IAM最小権限設計 + 暗号化(セキュリティもばっちり)
コードはTypeScriptベースのAWS CDK(v2.201.0)で構築されており、プロダクション環境でもそのまま使える構成です。
なぜ作ったのか?
毎回同じ構成を手作業で作っていた
Serverlessアーキテクチャを使うたびに、CDKコードをゼロから書いていました。毎回、構成がほぼ同じなのに、「API GatewayのCORS忘れてた…」「DynamoDBのGSI追加めんどい…」という感じで地味に時間がかかっていた。
変更に強く、チームでの再利用もできる構成にしたかった
構成を一元管理できれば、変更があっても全プロジェクトに反映しやすいです。例えば、APIのスロットリングやログの保存期間、CloudFrontの設定などを中央で制御できます。
新規プロジェクトをすぐ立ち上げたかった
今後SaaSを立ち上げる可能性があり、その際にすぐバックエンドと静的フロントをデプロイできるようなテンプレが欲しかった。
テンプレートの特徴
app-config.ts で簡単にカスタマイズ可能
export const defaultConfig: AppConfig = {
projectName: 'my-app',
environment: 'dev',
database: { ... },
api: { ... },
s3: { ... },
monitoring: { ... }
};
環境・データベースの種類・スロットル設定・CORSポリシー・CloudFrontのドメインなど、全部ここで完結します。
LambdaとAPI Gatewayが自動で連携
-
ルーティングは簡単に追加可能(REST APIベース)
-
ハンドラーは /lambda/handlers 以下に分けて配置
-
API GatewayのCORS、スロットル、CloudWatch連携もデフォルトで設定済み
データベースはDynamoDBとAuroraから選べる
使い分け例-
-
DynamoDB → 単純なKey-Value、マイクロサービスに最適
-
Aurora Serverless → リレーショナル構造が必要なアプリに
S3 + CloudFront で静的ホスティングもサポート
-
enableCloudFront: true にすると自動でCloudFront連携
-
カスタムドメインやACM証明書も設定可能
-
WebアプリのCI/CDパイプラインとも相性良し
よかったこと
-
毎回の初期設定がゼロに近くなった
-
構成変更が簡単・安全にできるようになった
-
Jestでユニットテスト可能
-
モジュール化されていて拡張も容易
-
チーム開発やマルチ環境にも対応
今後の展望
-
LambdaのCI/CDパイプラインを統合予定(GitHub Actionsなど)
-
ReactやVueとの統合ガイドも追加
-
Cognito連携オプションも将来的に追加
-
テナントごとにDynamoDBを分ける構成を標準化(SaaS対応)
まとめ
-
サーバーレスアーキテクチャは便利ですが、初期構築と設定が意外と面倒ですよね。
-
一度ちゃんとテンプレートを作っておくと、未来の自分がめちゃくちゃ助かります。
今では、cdk deployだけでほぼすべてが完成するようになりました。 -
もし同じように「毎回同じ構成を手動で作ってるな…」と感じている人は、テンプレート化を強くおすすめします。
GitHub リポジトリ
👉 simple-cdk-serverless-template
※スターしてもらえると嬉しいです✨
おわりに
何かフィードバックや質問があれば、お気軽にコメントしてください!
AWS、CDK、サーバーレス構成で悩んでいる方の参考になれば嬉しいです。