Serverless Framework V4 正式リリース!サーバレスエキスパートが新機能や変更点を解説😎

Serverless Framework V4 正式リリース!サーバレスエキスパートが新機能や変更点を解説😎

Serverless Framework V4 が正式にリリースされました。今回のバージョンアップでは、開発効率を大幅に向上させるための新機能や改良点が数多く盛り込まれています。

Serverless Framework V4 の主な変更点と解説

V4 で導入された主要な変更点と、それが開発者にもたらすメリットを紹介します。

ネイティブ TypeScript & ビルドサポート

JavaScript および TypeScript で記述された AWS Lambda 関数のバンドルをネイティブサポートしました。EsBuild ベースで高速な処理を実現し、プラグインは不要です。

AWS Lambda ハンドラーで TypeScript を使用している場合は、設定不要でデプロイ時に自動的にコードがビルドされます。

ビルドのカスタマイズも可能です。新しいビルド設定では、バンドルとミニファイの制御、多数の AWS Lambda 関数にわたるビルドの同時実行制御、ソースマップのサポートなどを容易に行えます。

詳細については、公式ドキュメントのネイティブ TypeScript & ビルドサポートを参照してください。

開発モードの刷新

AWS Lambda でのサーバーレスアプリケーション開発において、ローカルエミュレーションと AWS への都度デプロイという選択肢は、それぞれ複雑さや速度の面で課題がありました。

V4 では、両者の利点を組み合わせた、新しい開発モードを導入しました。serverless dev コマンドで開発モードセッションを開始すると、実際の AWS Lambda 関数はイベントをローカルコードにリダイレクトして処理し、そのレスポンスを実際の Lambda 関数に返します。

これにより、

  • デプロイなしでローカルコードをすぐに変更できるため、開発が高速化
  • ログ、エラーなどはローカルコードから直接取得できるため、迅速なフィードバックが得られる
  • カスタムコードのみがエミュレートされ、イベントやサーバーレスアーキテクチャの残りの部分は AWS 上で動作する為、高い精度を保てる

開発モードは、サービス内のすべての AWS Lambda 関数で動作します。各呼び出しはログを識別しやすいように一意の色で表示され、HTTP パスやメソッドなどの重要なイベント詳細は自動的にログに記録されます。

開発環境向けの機能であるため、開発完了後には AWS Lambda 関数内のコードを復元するために再デプロイする必要があります。

詳細については公式ドキュメントを参照してください。

stages プロパティの導入

Serverless Framework では、ステージと呼ばれる、異なる環境用のサーバーレスインフラストラクチャのスタックを、1 つまたは複数の AWS アカウントに作成できます。

V4 では、stages プロパティを導入し、ステージ固有のパラメータ、オブザーバビリティ設定、統合などを指定できるようになりました。 stages プロパティでは、ステージ固有の情報に加えて、すべてのステージのフォールバックオプションとして機能するデフォルト値も指定できます。

# serverless.yml

service: hoge-fuga
stages:
  prod:
    params:
      stripe_api_key: ${env:PROD_STRIPE_API_KEY}
  default:
    params:
      stripe_api_key: ${env:DEV_STRIPE_API_KEY}

従来の parameters も引き続きサポートされますが、今後は stages ブロックの使用が推奨されます。

詳細については、公式ドキュメントのstages プロパティを参照してください。

Terraform との統合

Serverless Framework 変数を再設計し、HashiCorp Terraform をはじめとする複数のソースとの統合と、データおよびシークレットの取得をサポートしました。

Terraform と Serverless Framework を併用し、Terraform で共有インフラストラクチャを、Serverless Framework でアプリケーション固有のインフラストラクチャを管理するといった使い方が可能です。

V4 では、AWS S3、リモート、HTTP、クラウドバックエンドから Terraform の状態出力を取得できるようになりました。 serverless.yml ファイル内で Terraform の状態出力にアクセスすることで、RDS 接続文字列や SQS キュー ARN など、共有インフラストラクチャに関する詳細を容易に取得できます。

${terraform} 変数 (名前はカスタマイズ可能) を使用することで、これらの操作を簡単に行えます。

${terraform} 変数を使用するには、Variable Resolver を設定します。Variable Resolver は V4 で導入された新しい概念で、変数に異なるソースを使用できるようにします。

service: hoge-fuga

stages:
  default:
    resolvers:
      terraform:
        type: terraform
        backend: s3
        bucket: terraform-state
        key: terraform.tfstate

functions:
  helloWorld:
    handler: handler.hello
    environment:
      TERRAFORM_VARIABLE: ${terraform:outputs:users_table_arn}
    

詳細については、公式ドキュメントのTerraform 統合を参照してください。

Vault 統合

シークレット管理ツール HashiCorp Vault とシームレスに統合できる ${vault} 変数を導入しました。デプロイ時に HashiCorp Vault から安全にシークレットを取得できるようになり、サーバーレスサービスのセキュリティと柔軟性が向上します。ステージごとに異なる Vault インスタンスを指定することも可能です。

service: my-service

stages:
  default:
    resolvers:
      terraform:
        address: http://127.0.0.1:8200
        token: ${env:VAULT_TOKEN}
        version: v1

functions:
  helloWorld:
    handler: handler.hello
    environment:
      VAULT_VARIABLE: ${vault:secret/data/mongo/credentials.password}

上記の例では、Vault サーバーの secret/data/mongo パスにあるシークレットを取得しています。

詳細については、公式ドキュメントのVault 統合を参照してください。

新しい support コマンド

Serverless Framework V4 のライセンスには、サポートが含まれています。

V4 では、新しい support コマンドが提供され、対話型のプロンプトを実行してエラーに関するレポートを生成したり、CLI からサポートチームにチケットを提出したりできます。

このコマンドは、前回の CLI コマンドに関するコンテキストを自動的に収集して出力します (シークレットやアカウント情報などの機密情報は除外されます)。生成されたレポートは、チームメイトと共有したり、GitHub リポジトリに投稿したりできます。

–AI フラグを使用すると、AI サービス (例: ChatGPT) のプロンプトに含めるためのコンテキストが最適化され、デバッグに役立ちます。

CLI で直接サポートチケットを開くと、サポートの質問とともにコンテキストが送信されるため、迅速なサポートが得られます。

詳細については、公式ドキュメントの support コマンド を参照してください。

CI/CD & ダッシュボード機能

V4 ライセンスでは、Serverless Framework ダッシュボードのほとんどの機能が追加費用なしで利用できるようになりました。サービスインベントリ、デプロイ履歴、パラメータ (シークレット)、AWS アクセスクレデンシャルのチーム内共有などが含まれます。CI/CD も V4 ライセンスに標準で含まれています。

これらの機能はチームメンバーに追加費用なしで提供され、AWS Lambda 関数の実行回数に基づいて価格が設定されることもありません。

ダッシュボードでは、AWS Lambda の強力なオブザーバビリティ機能も提供されています。トレースとメトリクスはオプションのアドオンとして、別途料金で利用できます。

Serverless Framework ダッシュボード からサインインできます。

新しい AWS 機能への対応

V4 では、新しい AWS サーバーレスサービスや機能のサポートにも積極的に取り組んでいます。

“python3.12″、”dotnet8″、”java21” などの新しい AWS Lambda ランタイムのサポートが追加されました。

JSON でのログのキャプチャ、ログの粒度の向上、カスタムロググループの設定など、AWS Lambda の高度なログ制御もサポートしました。

service: my-service

provider:
  name: aws
  logs:
    # Optional Configuration of Lambda Logging Configuration
    lambda:
      # The Log Format to be used for all lambda functions (default: Text)
      logFormat: JSON
      # The Application Log Level to be used, This can only be set if `logFormat` is
      applicationLogLevel: ERROR
      # The System Log Level to be used, This can only be set if `logFormat` is set
      systemLogLevel: INFO
      # The LogGroup that will be used by default. If this is set the Framework will
      logGroup: /aws/lambda/global-log-group

詳細については、公式ドキュメントの新しい AWS 機能を参照してください。

まとめ

Serverless Framework V4 では、開発者のフィードバックを基に、使いやすさと機能性の両面で大幅な進化を遂げました。Serverless Framework V4 を活用して、快適なサーバーレス開発を体験してください。

AWSモダナイズ開発データ分析基盤構築とデータ活用支援、基幹業務システムのUI.UX刷新はお気軽にお問い合わせください。