Pipfile で管理しているライブラリの依存関係をレイヤーに含めて Lambda Layers にデプロイする

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

はじめに

こんにちは、技術一課の山中です。

最近になって、 pipenv を使って開発をし始めたのですが、 Pipfile で管理しているライブラリレイヤーに含めてデプロイするにはどのようにすればよいでしょうか。


Lambda Layers のデプロイに必要な構成

Lambda Layers では、 こちら のブログにあるように以下の構成で、メインの Python コードとライブラリの依存関係をレイヤーに含める必要があります。


layer.zip
└── python
    ├── log.py
    ├── sns.py
    └── lib
        └── python3.7
            └── site-packages
                └── [libraries]


以下構成で開発しているコードを Lambda Layers にデプロイするにはどうすればよいでしょうか。


.
├── Pipfile
├── Pipfile.lock
└── python
    ├── log.py
    └── sns.py


依存ライブラリのインストール

Pipfile が存在するディレクトリで以下コマンドを実行します。

※ pipenv lock -r で requirements.txt の形式で依存ライブラリを標準出力し、 -r でその内容を受け取り -t で指定したディレクトリに依存ライブラリをインストールします。


$ pipenv lock -r | pip install -r /dev/stdin -t python/lib/python3.7/site-packages/


実行すると以下のように必要なライブラリが指定したディレクトリ構成でインストールされます。


.
├── Pipfile
├── Pipfile.lock
└── python
    ├── lib
    │   └── python3.7
    │       └── site-packages
    │           ├── [librariy_A]
    │           │   ├── INSTALLER
------------- [省略] ---------------------
    ├── log.py
    └── sns.py


あとは、これを Zip にしてアップロードすればデプロイ完了です。


おわりに

他によい方法があれば教えてください!