Serverless Frameworkで最新のboto3を使う方法

結論

いきなりですが、serverless.yml に以下の設定をすれば実現できます。

plugins:
  - serverless-python-requirements
custom:
  pythonRequirements:
    noDeploy: []

説明

「serverless-python-requirements」プラグインは
pythonのソースとパッケージをいい感じにLamdaにデプロイしてくれるものです。

requirements.txtにパッケージを記載しておくと、デプロイ時にまとめてZip化してくれます。

boto3===1.9.100
pytz===2018.3

仕様

ただ、以下のパッケージはLambdaに標準で搭載されているため、デフォルトだとLambda標準のバージョンで実行されてしまいます。

  • boto3
  • botocore
  • docutils
  • jmespath
  • pip
  • python-dateutil
  • s3transfer
  • setuptools
  • six

そのため、ローカルでは実行できてもAWS環境ではエラーになる可能性があります。

 File "/var/runtime/botocore/validate.py", line 291, in serialize_to_request
    raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Unknown parameter in input: "logStreamNamePrefix", must be one of: logGroupName, logStreamNames, startTime, endTime, filterPattern, nextToken, limit, interleaved

これを解決するために noDeployオプションを指定します。
noDeployオプションは指定したパッケージをデプロイに含めない設定をするもので、
デフォルトでは指定しなくても上記のboto3などが省略されている状態です。

そこで[]のように空のリストを指定することで、明示的にいずれのパッケージも省略しないという設定をすることができます(できるそうです)。

自分自身が直面したので、メモとして残しておきます。

サーバサイドエンジニア。オムライスが好物

シェアする

  • このエントリーをはてなブックマークに追加

フォローする