LoginSignup
7
3

More than 3 years have passed since last update.

serverless-python-requirements利用時のファイル構成

Last updated at Posted at 2019-12-01

こんにちわ。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環境変数を指定する場合は絶対パスにするで問題が解消されるのかも、、、
実際このディレクトリ構成を構築したのは数ヶ月前で、その時に上記を試したような記憶もあるのだけど曖昧、、、
時間があれば続報書きたいと思います

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3