昔作ったアプリで使っているserverless framworkをv1(Framework Core: 1.79.0)からv3(Framework Core: 3.14.0)にバージョンアップしたら、sls deploy
コマンドが失敗したので、色々修正した。
他のプロジェクトでも使ってるので、今後のバージョンアップのためにメモしておく。
[Serverless Frameworkの変更点]
serverless frameworkの非推奨設定の一覧はここにまとまっている。
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で検索すると以下のページにたどり着いた。
確かに、公式サイトでも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
公式ドキュメントによると、CLIをsls deploy --param="XXXX=YYYY"
の形で実行し、serverless.ymlの定義を${param:XXXX}
のように変更せよとあった。
指示通り修正したら、無事にデプロイできた。