Serverless Framework は、サーバーレスアプリケーションの構築とデプロイを簡素化するツールです。
v3 のサポートが2024年で終了し、v4では新たな料金体系が導入されるため、注意が必要。
本記事では、v4 の料金体系、クレジット消費、アップデート手順について解説します。

なぜ v4 にアップデートする必要があるのか?

Serverless Framework v3 は 2024 年でサポートが終了します。そのため、セキュリティ更新や新機能の恩恵を受けるためには、v4 へのアップデートが必須となります。v4 では、年間売上 200 万ドル以上の組織は有料となり、クレジット制が導入されます。

Serverless Framework v4 の料金体系の詳細

v4 では、サービスインスタンス と呼ばれる単位で課金されます。サービスインスタンスは、serverless.yml ファイルに定義されている service, stage, region の 3 つのパラメータの組み合わせで識別されます。
例えば、以下のような設定の場合、1 つのサービスインスタンスとしてカウントされます。

service: my-service
stage: dev
region: ap-northeast-1

もし、stageprod に変更すると、別のサービスインスタンスとして認識されます。
クレジット は、このサービスインスタンスをデプロイするために必要なものです。1 サービスインスタンス = 1 クレジットとなります。
重要なのは、デプロイ回数ではなく、サービスインスタンスの数で課金される という点です。1 つのサービスインスタンスを 100 回デプロイしても、消費されるクレジットは 1 つだけです。

クレジットの購入オプション

従量課金制で使用したクレジット数に応じて毎月請求されます。
1クレジット 4ドル
また、事前に必要なクレジットを予約しておく予備クレジットでは1クレジット 1ドルになります。
詳しくはServerless Framework 料金ページで確認できます。

クレジット数 通常料金 予備クレジット
2 無料 無料
10 $40 $10

クレジット消費に関する注意点

  • 一時的なデプロイ: 10日以内に削除される一時的なテスト環境などは課金対象外です。
  • クレジット不足: クレジットが不足すると、Serverless Dashboardの一部機能が制限されます。ただし、サービスは引き続き動作します。

Serverless Framework v4 アップデート手順(GitHub Actionsを使用する場合)

Serverless Framework v4へのアップデートは、以下の手順で行います。

1. Node.jsのバージョンアップ

Serverless Framework v4は、Node.js 18以上で動作します。現在のバージョンを確認し、必要であればアップデートしてください。

  • バージョン確認
    node -v
  • アップデート (nvmを使用する場合)
    nvm install 18
    nvm use 18
    

2. ライセンスキーの取得

Serverless Framework ダッシュボードにログインし、ライセンスキーを発行します。

  1. ダッシュボードにログイン後、画面左側のメニューから “Settings” を選択します。
  2. “Settings” ページ内から “License Keys” タブを選択します。
  3. “Add” ボタンをクリックし、ライセンスキーを発行します。

3. serverless.yml の編集

serverless.yml ファイルの frameworkVersion">=4.0.0" に変更します。

frameworkVersion: ">=4.0.0"

4. ライセンスキーの設定

取得したライセンスキーは、以下のいずれかの方法で設定します。

  • Repository secretsに環境変数SERVERLESS_LICENSE_KEYを設定
  • ワークフロー設定ファイル (GitHub Actionsなど) に環境変数 SERVERLESS_LICENSE_KEY を設定し、ライセンスキーを格納します。
    # .github/workflows/deploy.yml
    name: deploy
    jobs:
      ci:
        steps:
          # ... other steps ...
          - name: Serverless Deploy 🔥
            run: sls deploy --stage dev
            env:
              SERVERLESS_LICENSE_KEY: ${{ secrets.SERVERLESS_LICENSE_KEY }} 
        

5. デプロイ

デプロイを実行し、Github Actionでexport SERVERLESS_LICENSE_KEYが設定されていることを確認。

6. クレジット消費の確認

デプロイが成功し、サービスが正常に動作することを確認します。

Serverless Framework ダッシュボードで、クレジットの消費状況を確認します。
※ 1 サービスインスタンス = 1 クレジットですのでクレジット消費が 1 になります。

補足

自身の検証環境に 4 回デプロイしましたが、消費クレジットは 1 で、クレジットの追加消費はありませんでした。

発生した問題と解決策

  • 問題 1: Node.js のバージョンが古い

    エラーメッセージ:
    Your Nodejs version is too old, please upgrade to Node 18 or newer and rerun Serverless
    Error: Process completed with exit code 1. 
    

    解決策: nvm を使用して Node.js を 18以上 にアップデート

    nvm install 18
    nvm use 18
    
  • 問題 2: デプロイ時にライセンスキーを設定がない

    エラーメッセージ:
    Error: You must sign in or use a license key with Serverless Framework V.4 and later versions. Please use "serverless login".

    解決策: Serverless Framework ダッシュボードからライセンスキーを取得し、ワークフロー設定ファイルに環境変数 SERVERLESS_LICENSE_KEY を設定しました。

    # .github/workflows/deploy.yml
    name: deploy
    jobs:
      ci:
        steps:
          # ... other steps ...
          - name: Serverless Deploy 🔥
            run: sls deploy --stage dev
            env:
              SERVERLESS_LICENSE_KEY: ${{ secrets.SERVERLESS_LICENSE_KEY }} 
        
  • 問題 3: シークレットマネージャーからライセンスキーを取得しようとしたが、エラーが発生

    エラーメッセージ:
    Error: secretsmanager resolver of provider aws not found

    解決策: シークレットマネージャーではなく、リポジトリのシークレットに SERVERLESS_LICENSE_KEY を設定

まとめ

v3 からServerless Framework v4 移行は、Node.js のバージョンアップとライセンスキーの取得、設定が主な作業となります。またクレジットの管理も必要になります。
ダッシュボードを実際に触ってみて操作自体はそこまで複雑ではないと感じました。

【参考】
Serverless Framework
Serverless Framework(ドキュメント)
Serverless Framework(よくある質問)