😇

Serverless Framework v4から始まるライセンスについて

2024/06/02に公開

2023年10月26日に、Serverless Framework v4が発表され、新しくライセンスが導入されることが発表されました。v4自体は2024年5月21日からベータ版としてリリースされ、利用できるようになりました。

https://www.serverless.com/blog/serverless-framework-v4-a-new-model

対象者

前年度に年間収益が200万ドルを超えた組織がv4を利用する場合に対象となります。ただし、200万ドル以下だったかどうかの審査はないため、自己申告です。

また、価格ページには記載されていませんが、上記リリースブログとCLI上では個人の開発者や小規模企業、非営利団体は無料で利用できるとのことです。

ただし、ダッシュボード上には自身の組織について申請を出す方法やフラグなども見当たらないため、どのように処理されるか不明です。

ちなみに、クレジットが不足している間はダッシュボードの機能が一部制限されるだけで、実サービスに影響はないらしいです (不足している間にデプロイできるかどうかは不明)。

https://github.com/serverless/serverless/discussions/12376

何が問題か?

v4を使わなければ、特に問題はありません。ただし、v3は2024年までのサポートで、クリティカルなセキュリティ問題やバグにしか対応しません。

Serverless Framework V.3 will continue to be maintained via critical security and bug fixes through 2024.

https://www.serverless.com/blog/serverless-framework-v4-a-new-model#:~:text=to earlier versions.-,Serverless,-Framework V.3

つまり、ランタイムのバージョンアップは対応しない可能性が高いです。例えば、v3の最新であるv3.38.0と最初のv4のバージョンであるv4.0.26を比べるとこのようになります。

v3にはPython3.12やjava21, dotnet8のサポートが入っていません。いまは良いですが、いずれかはAWS Lambdaのランタイムサポートが切れるため、v3からv4へのバージョンアップが必要になります。その際に、今は良くても、ライセンスの問題が再発する可能性があります。

git diff v3.38.0 v4.0.30 -- lib/plugins/aws/provider.js

ライセンスは何をするためのものか?

ライセンスはServerless Frameworkを使って、デプロイするために利用します。このように、Serverlessへのログインかライセンスキーの入力を求められます。

サービスインスタンス

ライセンス数はサービスインスタンスという単位で購入する必要があります。以下のserverless.ymlにおけるservice, stage, regionの組み合わせをサービスインスタンスと定義しています。

例えば、1つのAWS環境でstageをdev, staging, prodの3つを用意し、regionをap-northeast-1, ap-northeast-2で用意しているとします。この場合、サービスインスタンスは3 * 2 = 6となります。functionの数はライセンス費用に加算されません。

ちなみに、stageをprod, regionをap-northeast-1だけにすると、サービスインスタンスは1です。これをステージング用AWS環境、本番用AWS環境で流用している場合は、(実験した限りだと) サービスインスタンスは1で計算されます。

serverless.yml
org: xxxx
app: xxx
service: xxx

provider:
  name: aws
  runtime: nodejs20.x
  stage: dev
  region: ap-northeast-1

functions:
  hello:
    handler: handler.hello
    events:
      - httpApi:
          path: /
          method: get
  hello2:
    handler: handler.hello2
    events:
      - httpApi:
          path: /hoge
          method: get

ライセンス使用量の確定タイミング

Serverless Frameworkのダッシュボード上でアクティブなサービスインスタンスの確認ができます。

こちらのアクティブな状態 (緑色ステータス) が5日続いたサービスインスタンスの数が、ライセンス使用量として記録されます。そのため、デプロイして放置している間もライセンス使用量としてカウントされるため、注意が必要です。

https://www.serverless.com/pricing#:~:text=Instance within 5-,days,-of activation%2C the

Dev Mode

v4からDev Modeが導入されました。こちらはAWS Lambdaにリクエストを送った際に、ローカルの関数を呼び出して実行するための機能です。serverless-offlineと異なり、実際にAWS上にリソースを作成します (Dev Modeを終了してもリソースは残り続けます)。

こちらの機能でもリソースが作成されますが、サービスインスタンスにはカウントされません。

サポートに質問予定の内容について

以下、調べてもよく分からなかった部分です。個人的に、Serverless社にメールを出すかもしれないので、何か分かり次第、記事をアップデートします。

  • ライセンス上限に達した際に、デプロイできなくなるのかどうか
  • リリース頻度が半年に1回の場合も、毎月課金が必要なのか
    • リリース後にダッシュボードからアプリを消せば課金されないが、そういう運用を想定してるのかどうか
  • AWS環境違いでは、サービスインスタンスが加算されないが意図的かどうか
  • v3でランタイムのバージョンアップはサポートされるかどうか
GitHubで編集を提案

Discussion