Lambda開発のための環境づくり(ファイル・フォルダ構成編)

記事タイトルとURLをコピーする

はじめに

アプリケーションサービス部の森です。

最近、 M1macでトリプルディスプレイ可能なDockが登場 というYoutubeを見て、もう少し早ければ購入して、家の机の上の配線をきれいにできたのにと思った次第です。 整理という点では、プログラムの開発をする際にどのファイルをどのフォルダに置くかということを整理しないといけないなと思い、 前回、 Lambda開発のための環境づくり(プログラム開発環境 統一編) をご紹介した第二弾です。

今回は、Serverless Frameworkを利用して開発する際に必要なファイルなどをどのフォルダに置けばよいかなどを公開したいと思います。

前提条件

ある程度前提条件を決めておきます。 利用するツールやライブラリ、アプリなどを前提条件として定義します。

  • Git
    • プログラムなどを管理するバージョン管理システム
    • Github / GitLab / Backlog GitなどなんでもOK
  • Python
    • 今回例として利用するプログラム言語
    • version: 3.9
  • Pipenv
    • Pythonのパッケージ管理と仮想環境の構築を簡単に自動で行ってくれるツール
    • 2022.5.2
  • pyenv
    • Pythonのバージョン管理が可能な仮想環境
    • V2.3.2
  • Serverless Framework
    • サーバーレスアプリケーションの構成管理、デプロイするためのツール
    • 最新でOK
  • Node.js
    • Serverless Frameworkを動作させるために利用する言語で、その他の用途としてはサーバーサイドJSとしても利用
    • 14+
  • Flake8
    • Pythonのプログラムに対して静的解析するツール
  • pytest
    • Pythonのプログラムに対して単体テストを支援するためのモジュール
  • デプロイについて
    • デプロイは複数環境(開発環境(dev)/ステージング環境(stg)/本番環境(prd))に行う
    • デプロイするために、AWS CodeBuildを利用
  • システム構成例
    • APIを提供するバックエンドシステムを想定

ファイル/フォルダ構成

project_folder/                             # リポジトリのトップフォルダ
    ├ app/                                  # pythonファイルを格納するフォルダ
    │  ├ functions/                         # Lambdaハンドラーになるファイルを格納するフォルダ
    │  │    ├ create_account.py
    │  │    ├ delete_address.py
    │  │    ├ select_address.py
    │  │    └ update_address.py
    │  └ libs/                              # Lambdaハンドラーから呼び出されるファイルを格納するフォルダ
    │       ├ api/                          # 例:API呼び出しされた際のメソッドを定義したファイルを格納するフォルダ
    │       │    ├ create_account_api.py
    │       │    ├ delete_account_api.py
    │       │    ├ select_account_api.py
    │       │    └ update_account_api.py
    │       ├ aws/                          # 例:AWSリソースにアクセスするメソッドを定義したファイルを格納するフォルダ
    │       │    ├ cognito.py
    │       │    ├ dynamodb.py
    │       │    ├ secrets_manager.py
    │       │    └ sqs.py
    │       ├ database/                     # 例:データベースアクセスするメソッドを定義したファイルを格納するフォルダ
    │       │    ├ master_account.py
    │       │    ├ master_address.py
    │       │    ├ master_company.py
    │       │    ├ transaction_order.py
    │       │    ├ transaction_sales.py
    │       │    └ transaction_ship.py
    │       └ model/                        # 例:モデルクラスを定義したファイルを格納するフォルダ
    │            ├ create_account_model.py
    │            ├ update_account_model.py
    │            ├ select_account_model.py
    │            └ update_account_model.py
    ├ conf/                                 # 設定ファイルを格納するフォルダ
    │  ├ dev.yml
    │  ├ prd.yml
    │  └ stg.yml
    ├ tests/                                # テストコードを格納するフォルダ(今回はこのフォルダ配下は省略)
    ├ .flake8                               # Flake8の設定ファイル
    ├ .gitignore                            # Git管理対象外を定義するファイル
    ├ .node-version                         # Node.jsのバージョン(Serverless Frameworkで利用)
    ├ .python-version                       # Pythonバージョンを指定する
    ├ Pipfile                               # パッケージを管理するファイル
    ├ README.md                             # READMEファイル
    ├ buildspec.yml                         # 例:CodeBuildでデプロイするための設定ファイル
    ├ package-lock.json                     # package.jsonに従ってインストールしたパッケージとバージョンを記載したファイル
    ├ package.json                          # npmでフレームワークやライブラリを管理するための構成ファイル
    ├ pytest.ini                            # 例:PyTestを実行する際
    └ serverless.yml                        # 例:Serverless Frameworksを利用する場合の設定ファイル

最後に

今回は一つの例として、リポジトリに格納するファイル/フォルダ構成を表現してみました。 ファイル/フォルダ構成はプロジェクト開始時にある程度枠として決めておくことで、 開発者が毎度プロジェクト時に考える必要がないので、テンプレートを作っておくことをオススメします。

今後も開発時の準備や開発時のポイントを書いていこうと思います。