🐧

Serverless Frameworkで利用してるパッケージやライブラリの更新する

2022/01/11に公開

はじめに

こんにちは、クラスメソッド 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を編集します。

serverless.yml(抜粋)
...
provider:
  name: aws
  runtime: python3.9
...

Pipfileのpython_versionを編集します。

Pipfile(抜粋)
...
[requires]
python_version = "3.9"

以下のコマンドでPipfile.lockも更新します。

pipenv install

serverless.ymlの記述方法のアップデート

以下のDefault provider.lambdaHashingVersionに対応します。

https://www.serverless.com/framework/docs/deprecations#default-providerlambdahashingversion

provider.lambdaHashingVersion20201221にします。

serverless.yml(抜粋)
...
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..

デプロイ済のサービスを削除して、新規作成することでエラー解消しました。しかし状態を持つリソースを定義している場合は新規作成はやりたくないですね。。

参考までに以下のブログで回避策の記載があったのでご紹介します。他に良い方法が見つかったら、別途ご紹介しようと思います。

https://inokara.hateblo.jp/entry/2020/07/09/002343

  1. 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.
  2. 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).
  3. Run sls deploy, this time without additional --enforce-hash-update flag: that will restore the original descriptions on all Lambda functions.

https://www.serverless.com/framework/docs/guides/upgrading-v3#lambda-hashing-algorithm

あとがき

動作確認はできていますが、もし間違っている箇所があればご指摘いただけると嬉しいですm(_ _)m

それではまた!

Discussion