Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

makoll
Venture Republicという会社で、旅行サービスを開発しているエンジニアです 個人ではexplorstateというサービスを作って公開したりしています Typescript/Next.js/React/MySQL/Python/AWS/VSCode
https://explorstate.makoll.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away