本カタログの構成
Python ランタイムで AWS Lambda のアプリケーション開発を行うための推奨構成です。
カタログ構成
本カタログに含まれるソースコードの構成図です。
アーキテクチャ
本カタログに含まれるドキュメントおよびソースコードは、以下のような構成を前提としています。
2つのアプリケーションタイプ
AWS Lambda の起動パターンは大きく2つに分類することができます。これは、AWS Lambda の仕様ではなく、本カタログの実装プラクティス観点での分け方です。
- WebAPI 開発
- API Gateway から起動される WebAPI ロジック
- イベント処理
- S3・DynamoDB・SQS・SNS などから通知されたイベントの処理
それぞれ実装アプローチは異なるように見えますが、共通したレイヤー構造を持ちます。各ディレクトリ構成についてはドメイン駆動開発のプラクティスよりインスパイヤーされたもので、スクリプト言語のランタイムである点、及び、実行環境が AWS Lambda である点を反映した形になっています。
カタログのプロジェクトは ~/serverless-backend-application-stack-python
というディレクトリに配置されています。
全体のプロジェクト構成
本カタログ全体のディレクトリおよびファイル構成です。
serverless-backend-application-stack-python/
│
├── .vscode/ # VSCode 設定ファイル
│ ├── extensions.json
│ └── settings.json
│
├── deploy/
│ ├── cloudformation/
│ │ ├── apigateway-lambda.yaml
│ │ ├── db.yaml
│ │ ├── s3-lambda.yaml
│ │ └── vpc.yaml
│ └── fixtures/
│ └── psycopg3.zip # DBライブラリ(psycopg3)のバイナリ
│
├── src/
│ ├── sample_api/ # WebAPI 実装部分
│ │ ├── actions/
│ │ │ ├── create_users_action.py
│ │ │ └── get_users_action.py
│ │ ├── daos/
│ │ │ └── users_dao.py
│ │ ├── services/
│ │ │ └── users_service.py
│ │ └── index.py
│ │
│ ├── sample_event/ # イベント処理実装部分
│ │ ├── actions/
│ │ │ └── data_import_action.py
│ │ ├── aws/
│ │ │ └── s3_client.py
│ │ ├── daos/
│ │ │ └── users_dao.py
│ │ ├── services/
│ │ │ └── data_import_service.py
│ │ └── index.py
│ │
│ ├── .init_db.py # Local DB 初期化
│ ├── .init_minio.py # Local S3 初期化
│ ├── .local.sample_api.get_users.py # Local 実行スクリプト
│ ├── .local.sample_api.post_users.py # Local 実行スクリプト
│ ├── .local.sample_event.import_users.py # Local 実行スクリプト
│ └── sample_users.csv # Local 実行のためのダミーデータ
│
├── tests/
│ ├── sample_api/ # WebAPI 実装部分のユニットテスト
│ │ ├── conftest.py
│ │ ├── test_create_users.py
│ │ └── test_get_users.py
│ │
│ └── sample_event/ # イベント処理部分のユニットテスト
│ ├── conftest.py
│ └── test_data_import.py
│
├── .editorconfig
├── .gitignore
├── build-app.sh # WebAPI および イベント処理 Lambda 関数のデプロイ用 zip 作成スクリプト
├── build-layer.sh # 依存ライブラリ Lambda Layer のデプロイ用 zip 作成スクリプト
├── docker-compose.yml # Local DB (PostgreSQL), Local S3 (MiniO) 立ち上げ用
├── poetry.lock
├── pyproject.yoml
└── README.md