kdnakt blog

hello there.

serverless frameworkをv1からv3に上げたらデプロイできなくなった

昔作ったアプリで使っているserverless framworkをv1(Framework Core: 1.79.0)からv3(Framework Core: 3.14.0)にバージョンアップしたら、sls deployコマンドが失敗したので、色々修正した。

kdnakt.hatenablog.com

 

他のプロジェクトでも使ってるので、今後のバージョンアップのためにメモしておく。

 

 

[Serverless Frameworkの変更点]

serverless frameworkの非推奨設定の一覧はここにまとまっている。

www.serverless.com

 

SLS_DEPRECATION_DISABLE環境変数を利用すると、非推奨機能を利用できるようになるらしいが、非推奨なのでわざわざ利用しなくてもいいと思う。

 

[serviceプロパティ]

元々serverless.ymlでサービス名を以下のように定義していた。

# v1、v2の書き方
service:
  name: fivefingers

 

しかし、serverless framework v3でデプロイしようとすると、以下のエラーが表示された。

$ sls deploy
Environment: darwin, node 14.19.1, framework 3.14.0, plugin 6.2.1, SDK 4.3.2
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
Object notation for "service" property is not supported. Set "service" property directly with service name.

 

Googleで検索すると以下のページにたどり着いた。

stackoverflow.com

確かに、公式サイトでもv3.0.0以降はserviceのプロパティに直接サービス名を指定せよ、と書かれていた。

修正後はこのようになる。

# v3以降の書き方
service: fivefingers

 

serverless.ymlの他の箇所で、以下のようにサービス名を取得している箇所があったので、合わせて修正した。サービス名の取得方法が${self:service.name}から${self:service}に変更になっている。短くなってよかった。

# v1, v2の書き方
custom:
  roomsTable: ${self:service.name}-rooms-${self:provider.stage}

# v3以降の書き方
custom:
  roomsTable: ${self:service}-rooms-${self:provider.stage}

 

[CLIオプション]

v3.3.0以降、CLIのオプション経由でのパラメータの受渡方法も変更になっている。

元々、serverless.ymlで次のように定義していた。

custom:
  corsOrigin: ${opt:corsOrigin, 'http://localhost:3000'}

 

v1の時は、この${opt:XXXX}の書き方で、sls depoloiy --XXXX YYYYのようにCLIを実行すると、YYYYが値として渡されるようになっていた。

しかし、v3.3.0以降はこれが以下のようなエラーとなってしまう。

$ sls deploy --corsOrigin https://kdnakt.github.io
Environment: darwin, node 14.19.1, framework 3.14.0, plugin 6.2.1, SDK 4.3.2
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
Detected unrecognized CLI options: "--corsOrigin".


1 deprecation found: run 'serverless doctor' for more details

 

公式ドキュメントによると、CLIsls deploy --param="XXXX=YYYY"の形で実行し、serverless.ymlの定義を${param:XXXX}のように変更せよとあった。

指示通り修正したら、無事にデプロイできた。

 

[まとめ]

  • serverless frameworkをv1からv3.14.0に上げたらデプロイ(sls deploy)ができなくなった
  • 公式サイトの指示に従って修正することで、デプロイできるようになった
  • 修正したコードは以下のリポジトリにまとめてある

github.com