Serverless Frameworkで利用してるパッケージやライブラリの更新する
はじめに
こんにちは、クラスメソッド AWS事業本部の筧です。
私の所属しているチームでは、Serverless Frameworkをよく利用してサービス開発をしています。
今回、過去に開発したサービスを改修するタイミングでパッケージやライブラリを更新したので、実施内容をご紹介します。
前提
以下のパッケージ管理ソフトを利用しています。
- npm
- pipenv
やること
- Serverless Frameworkのプラグインのアップデート
- python3.9へアップデート
- serverless.ymlの記述方法のアップデート
やってみた
Serverless Frameworkのプラグインのアップデート
例として、serverless-python-requirements
というプラグインのみ最新化します。
$ sls plugin install -n serverless-prune-plugin
python3.9へアップデート
serverless.ymlのruntime
を編集します。
...
provider:
name: aws
runtime: python3.9
...
Pipfileのpython_version
を編集します。
...
[requires]
python_version = "3.9"
以下のコマンドでPipfile.lockも更新します。
pipenv install
serverless.ymlの記述方法のアップデート
以下のDefault provider.lambdaHashingVersion
に対応します。
provider.lambdaHashingVersion
を20201221
にします。
...
provider:
name: aws
runtime: python3.9
lambdaHashingVersion: 20201221
...
なお、上記変更を行ってデプロイしたところ以下のエラーがでました。
Serverless Error ----------------------------------------
An error occurred: XXXXXXXX - A version for this Lambda function exists ( 7 ). Modify the function to create a new version..
デプロイ済のサービスを削除して、新規作成することでエラー解消しました。しかし状態を持つリソースを定義している場合は新規作成はやりたくないですね。。
参考までに以下のブログで回避策の記載があったのでご紹介します。他に良い方法が見つかったら、別途ご紹介しようと思います。
- Run sls deploy with additional --enforce-hash-update flag: that flag will override the description for Lambda functions, which will force the creation of new versions.
- Set provider.lambdaHashingVersion to 20201221 in your configuration: your service will now always deploy with the new Lambda version hashes (which is the new defualt in v3).
- Run sls deploy, this time without additional --enforce-hash-update flag: that will restore the original descriptions on all Lambda functions.
あとがき
動作確認はできていますが、もし間違っている箇所があればご指摘いただけると嬉しいですm(_ _)m
それではまた!
Discussion