メインコンテンツまでスキップ

本カタログの構成

Node.js ランタイムで AWS Lambda のアプリケーション開発を行うための推奨構成です。

カタログ構成

本カタログに含まれるソースコードの構成図です。

アーキテクチャ

本カタログに含まれるドキュメントおよびソースコードは、以下のような構成を前提としています。

2つのアプリケーションタイプ

AWS Lambda の起動パターンは大きく2つに分類することができます。これは、AWS Lambda の仕様ではなく、本カタログの実装プラクティス観点での分け方です。

  • WebAPI 開発
    • e.g. API Gateway から起動される WebAPI ロジック
  • イベント処理
    • e.g. S3・DynamoDB・SQS・SNS などから通知されたイベントの処理

それぞれ実装アプローチは異なるように見えますが、共通したレイヤー構造を持ちます。各ディレクトリ構成についてはドメイン駆動開発のプラクティスよりインスパイヤーされたもので、スクリプト言語のランタイムである点、及び、実行環境が AWS Lambda である点を反映した形になっています。

カタログのプロジェクトは ~/serverless-backend-application-stack-nodejs というディレクトリに配置されています。

全体のプロジェクト構成

本カタログ全体のディレクトリおよびファイル構成です。

serverless-backend-application-stack-nodejs/

├── .vscode/ # VSCode 設定ファイル
│ ├── extensions.json
│ └── settings.json

├── .local/ # ローカル動作確認用の実行スクリプト
│ ├── sample_api/
│ │ ├── create-user.ts
│ │ └── get-user.ts
│ ├── sample_event/
│ │ └── test-s3-event.ts
│ ├── setup-database.ts
│ ├── setup-minio.ts
│ └── swagger-server.ts

├── deploy/
│ ├── cloudformation/
│ │ ├── apigateway-lambda.yaml
│ │ ├── db.yaml
│ │ ├── s3-lambda.yaml
│ │ └── vpc.yaml
│ └── fixtures/
│ └── prisma.zip # DBライブラリ(prisma)のバイナリ

├── src/
│ ├── sample_api/ # WebAPI 実装部分
│ │ ├── actions/
│ │ │ ├── CreateUserAction.ts
│ │ │ ├── GetUserAction.ts
│ │ │ └── index.ts
│ │ ├── aws/
│ │ │ ├── DynamoDB.ts
│ │ │ └── index.ts
│ │ ├── daos/
│ │ │ ├── UserDao.ts
│ │ │ └── index.ts
│ │ ├── exception/
│ │ │ ├── ExceptionHandler.ts
│ │ │ ├── SampleException.ts
│ │ │ ├── StatusCode.ts
│ │ │ └── index.ts
│ │ ├── libs/
│ │ │ ├── Hono.ts
│ │ │ ├── Prisma.ts
│ │ │ └── index.ts
│ │ ├── logger/
│ │ │ ├── Logger.ts
│ │ │ └── index.ts
│ │ ├── models/
│ │ │ └── index.ts
│ │ ├── routes/
│ │ │ ├── UserRoute.ts
│ │ │ └── index.ts
│ │ ├── schemas/
│ │ │ ├── ErrorResponseSchema.ts
│ │ │ ├── UserSchema.ts
│ │ │ └── index.ts
│ │ ├── services/
│ │ │ ├── UserService.ts
│ │ │ └── index.ts
│ │ ├── Config.ts
│ │ ├── Env.ts
│ │ ├── SampleAPI.ts
│ │ └── index.ts
│ │
│ ├── sample_event/ # イベント処理実装部分
│ │ ├── actions/
│ │ │ ├── ProcessS3EventAction.ts
│ │ │ └── index.ts
│ │ ├── aws/
│ │ │ ├── S3.ts
│ │ │ └── index.ts
│ │ ├── daos/
│ │ │ ├── UserDao.ts
│ │ │ └── index.ts
│ │ ├── helpers/
│ │ │ ├── CsvParser.ts
│ │ │ └── index.ts
│ │ ├── logger/
│ │ │ ├── Logger.ts
│ │ │ └── index.ts
│ │ ├── services/
│ │ │ ├── UserImportService.ts
│ │ │ └── index.ts
│ │ └── index.ts
│ │
│ └── sample_users.csv # Local 実行のためのダミーデータ

├── tests/
│ ├── sample_api/ # WebAPI 実装部分のテストコード
│ │ ├── CreateUser.test.ts
│ │ └── get-user.test.ts
│ │
│ ├── sample_event/ # イベント処理部分のテストコード
│ │ └── process-s3-event.test.ts
│ │
│ └── testing-utils/ # テストで利用する各種 Helper, Util, セットアップなど
│ ├── dynamodb-helper.ts
│ ├── hono-app.ts
│ ├── hono-test-helper.ts
│ ├── minio-client.ts
│ └── setup.ts

├── README.md
├── biome.json # Biome(Lint / Formatter)の設定
├── build-app.sh # WebAPI および イベント処理 Lambda 関数のデプロイ用 zip 作成スクリプト
├── docker-compose.yml # Local DB (PostgreSQL), Local S3 (MiniO) 立ち上げ用
├── esbuild.config.ts # バンドラー(ESBuild)の設定
├── package-lock.json
├── package.json
├── tsconfig.json
└── vitest.config.ts # テストフレームワーク(vitest)の設定