【Tips】Serverless Frameworkで最新のboto3をインストールしたLambda Layerをデプロイする
こんにちは。DI部の春田です。
表題の件、思わぬところで突っかかってしまったので簡単に共有させていただきます。
問題点
- 環境:
- Python 3.7
- Serverless Framework 1.34.1
- serverless-python-requirements 4.2.5
2019年6月現在のboto3は、最新バージョンとAWS LambdaのPython3.7ランタイムで使えるデフォルトバージョン間で結構な差分が出てきております。
- Lambdaの現行バージョン
- boto3: 1.9.42 (Nov 10, 2018)
- botocore: 1.12.42
- 最新
- boto3: 1.9.174 (Jun 22, 2019)
- botocore: 1.12.174
実際、デフォルトのバージョン1.9.42では、最新の1.9.174の SFN.Client.create_state_machine
で指定できるパラメータ tags
がなかったため、デフォルトのboto3を最新のものに上書きしたいと思ったのが動機でした。
- SFN — Boto 3 Docs 1.9.174 documentation #create_state_machine
- SFN — Boto 3 Docs 1.9.42 documentation #create_state_machine
ところが、開発環境ではserverless-python-requirementsを使ってPythonのLambda Layerを設定しているのですが、 requirements.txt
にそのままboto3を加えてもLayerに反映されなかったのです。
対処
serverless-python-requirementsの Omitting Packages によれば、 requirement.txt
にインストールしたいパッケージを明示的に記入したとしても、以下のパッケージはデフォルトで除外されてしまうようです。
- boto3
- botocore
- docutils
- jmespath
- pip
- python-dateutil
- s3transfer
- setuptools
- six
これを回避するために、 noDeploy
に空のリストを渡しました。
custom: pythonRequirements: noDeploy: []
サイズは重くなってしまいますが、こうすることで最新バージョンのboto3を使用することができます。