こんにちわ。Patheeの廣瀬です
serverless-python-requirements
利用時の
ファイル構成についての情報があまり見当たらなかったので書いていきます
状況
会社でAWS lambda
を利用したAPIを開発している
新規プロジェクトのバックエンドの一部です
概要
- 言語は
Python3.7
- パッケージ管理は
Pipenv
-
Serverless Framework
を利用して開発・実行・デプロイ - パッケージは
serverless-python-requirements
を利用してLayer化 - 開発環境はDocker内に構築し、Docker内でローカルテスト(UT等)を実施する
ディレクトリ構成
root
├── lambda
│ ├── env
│ │ ├── dev
│ │ │ └── resource.yml
│ │ └── prod
│ │ └── resource.yml
│ ├── handler
│ │ └── aaa # 各APIの単位
│ │ └── aaa.py
│ └── serverless.yml
├── layer
│ └── package
│ ├── Pipfile # ※1
│ ├── Pipfile.lock # ※2
│ └── serverless.yml
├── stepfunctions
│ └── sf_aaa.yml
├── docker-dompose.yml
├── Dockerfile
├── Pipfile # ※1へのSymbolic Link
└── Pipfile.lock # ※2へのSymbolic Link
Serverless Framework
のカバー範囲
作成
- Lambda
- Layer
- API Gateway
- Stepfunction
利用のみ
- RDS
- SNS
- SQS
- VPC
- S3
問題点
Pipenvは以下の2つのシチュエーションで実施している
- Docker内にパッケージをインストール
-
serverless-python-requirements
でLayerを作成
上記の両シチュエーションで同じパッケージを利用されている状況にしたいため、
Pipfileを共通のものを使いたいが、
それぞれPipfileをディレクトリ指定することができなかった
ので、解決方法として、serverless-python-requirements
で利用する方に実態をおき、
Docker内でのインストールではシンボリックリンクを上記ファイルに貼って凌ぎました
と、この記事を書くのに改めて調べていて、
pipenvでPIPENV_PIPFILE環境変数を指定する場合は絶対パスにするで問題が解消されるのかも、、、
実際このディレクトリ構成を構築したのは数ヶ月前で、その時に上記を試したような記憶もあるのだけど曖昧、、、
時間があれば続報書きたいと思います