🙄

Serverless Framework V2は早めに移行した方が良さそう(遅くても2024年中?)

2023/12/11に公開

Serverless Frameworkとは

Serverlessはサーバーレスなアプリケーションを簡単に開発、デプロイするためのNode.js製のツールです。
AWS、Azure、GCP等のクラウドサービスによらず利用することができ、ランタイムの言語もクラウドサービス側で許されているものであれば利用することができます。(フォースタはAWSを利用しているため、この記事ではAWSを例に説明します。)
デプロイコマンドを実行すると、各クラウドサービスのリソース構築処理が実行されます。AWSを例に挙げると、デプロイコマンド実行時にCloudFormationのテンプレートが作成され、Lambdaおよびその他必要なリソースが作成されます。

このServerless Frameworkには、現在、V2とV3があります。
V3への移行記事などは多く存在するのですが、明確なLTSやいつまでに移行すべきかがパッとわからなかったので調べてみました。

V2のLTSは?

リポジトリを見てみる → わからん🧐

npmのページから見えるVersion情報では、V3がTag=latestがついていて、V2にTag=latest-2がついていました。
→V2もmaintenance modeではなさそう?と推測

ドキュメントを見てみる → わからん🧐

https://www.npmjs.com/package/serverless?activeTab=versions

また、公式のページをみても移行についてのガイダンスはあるものの明確に、LTSやmaintenance modeは書かれている箇所を見つけることができませんでした。

https://www.serverless.com/framework/docs/guides/upgrading-v3

試しにV2をインストールしてみる → わかったかも😒

インストール:

npm install -g serverless@latest-2

Version確認:

% serverless --version
Framework Core: 2.72.4
Plugin: 5.5.4
SDK: 4.5.1
Components: 3.18.2
(node:57345) NOTE: We are formalizing our plans to enter AWS SDK for JavaScript (v2) into maintenance mode in 2023.

こんな文が出てきました。

We are formalizing our plans to enter AWS SDK for JavaScript (v2) into maintenance mode in 2023.

なるほど。確かにaws-sdkもv2とv3があったな。。。
言葉の通り、aws-sdk v2が2023年中にメンテナンスモードになるようです。

https://blog.open.tokyo.jp/2023/04/06/aws-sdk-v2-will-be-mentenance-mode-in-2023.html

Serverless Framework V2はAWS SDK V2を使っており、そのため先ほどの警告が出てきたものと思われます。

GitHubを見てみる

package.jsonをみると、aws-sdkのv2に依存していることがわかる。

  "dependencies": {
    "@serverless/dashboard-plugin": "^7.2.0",
    "@serverless/platform-client": "^4.5.1",
    "@serverless/utils": "^6.13.1",
    "abort-controller": "^3.0.0",
    "ajv": "^8.12.0",
    "ajv-formats": "^2.1.1",
    "archiver": "^5.3.1",
    "aws-sdk": "^2.1404.0",

https://github.com/serverless/serverless/blob/main/package.json

mainブランチでは、aws-sdkのmaintenance messageを抑制するようなコードが入っていました。

'use strict';

require('aws-sdk/lib/maintenance_mode_message').suppress = true;

module.exports = require('aws-sdk');

https://github.com/serverless/serverless/blob/main/lib/aws/sdk-v2.js

→推測ですが、aws-sdk v2はserverless framework v2のためにinstallしているもので、v3系では使っていないのでメッセージも抑制するようにしているのではないかと思いました。

結論

  • Serverless Frameworkが使っているaws-sdkが2023年中にメンテナンスモードに入る
    • 少なくともServerless Framework V2は依存していそう
    • Serverless Framework V3は依存しているか不明だがおそらくしていない
  • aws-sdkがサポート終了になるであろう2024年までにServerless FrameworkをV3に上げる対応をしておいた方が良さそう

Discussion