Serverless Frameworkをさっくりまとめると
- AWSリソースをコードベースで管理、開発・デプロイするためのもの
- デプロイコマンド実行 → CloudFormationにテンプレート作成 → 必要リソースの作成
- Terraformと比べて、FaaS(Function as a Service) レベルのリソースの管理に適している
- API Gateway
- Lambda
- DynamoDB
サーバレスとは
サーバーのリソースを意識しない(サーバーの管理・運用が不要)という意味でサーバーレス
- 最も大きな意味合いとしては物理的なサーバーを用意する必要がないという意味
- 実態としてはサーバーの運用・管理がないというところまで含まれる
メリット
- 物理的なサーバーを用意するための諸コストの削減
- 提供されているリソースそのものの管理責任はベンダーにあること
- あくまでリソースのセキュリティ・ソフトウェアバージョン...…etcというところに限る
- 負荷に対して柔軟に対応できる
- オートスケーリングと負荷分散
- 可用性を確保することも容易
- AWSの例で言えば、単純に実行コンテナ自体を複数展開するだけでなくマルチAZ・マルチリージョンまで含めた設計が容易
- ただし、相応にコストはかかる
デメリット
- リソースがベンダーに依存するところ
- 急な仕様変更やアップデートに対応しないといけないことがある
- AWS → GCといったベンダー間の移行が困難であること
- 監視が困難であること
- 複数のリソースで1つのサービスが作られるのでどのリソースで何をモニタリングするべきなのかを理解していないといけない
- AWSであればCloudWatch、CloudTrail、X-Ray辺りがどういう役割を持っているのか、そして適切にログを吐かせる必要がある
- コールドスタート問題
- リソースを起動するためのリソースが必要というジレンマ
- つまり、どうあっても起動までに些か待ちの時間が発生する
- 低レイテンシーとは相反してしまう
- リソースを起動するためのリソースが必要というジレンマ
Terraformとの使い分け
TerraformはIaC(Infrastructure as Code)、つまりインフラをコードで管理する。
前段で書いた通りServerless FrameworkはTerraformと比べて、FaaS(Function as a Service) レベルのリソースの管理に適しているという特徴があるのでそこを意識したい。
調べていて意識するべきと思った点
- Serverless Frameworkは「Lambdaアプリケーションの開発」を起点としたフレームワークであること
- Lambda・API Gatewayを軸としなければ向かない可能性がある
- VPC・ECSなどのインフラ部分の管理はTerraformのが良さそう
- インフラとマイクロサービスを依存させないという設計思想もアリ
- Terraformから独立して開発、デプロイ、スケーリングが可能
- アプリケーションエンジニアはインフラを考慮した設計で時間を取られず、インフラエンジニアその逆というメリットもある
- Serverless FrameworkはIaCではあるが、アプリケーション内に置かれるのでインフラとアプリケーションの分離という点では疎結合にならないこと
- インフラ領域と分離ができていないためアプリケーション内で管理するので、別ベンダーへの移行の際にネックになるデメリットが生じる
- コードの流用性はTerraformに比べてない
-
そのアプリケーションに密接するかを意識してServerless Frameworkで管理するものを決めるべきであること
- 例えばKinesis・IAMロール・EventBridgeはアプリケーションごとに紐付くのでServerless Frameworkで一緒に管理するほうが良いケースかもしれない
- 他方、データストアは他のアプリケーションでも使用するのでまとめてしまうと開発・保守・運用に支障がでる可能性が高い
- API Gatewayは接続先のリソース及びAPI Gateway自体がアプリケーションで決定すべき事項が設定内容に依存してくるのでServerless Frameworkで管理するほうが良いケースかもしれない
参考
- [サーバレスフレームワーク](https://zenn.dev/shlia/articles/5bec35d77ef471)
- [**Serverless Framework の使い方を初心者にも分かりやすく説明する**](https://qiita.com/mkin/items/0a82c84df084496544c6)
- [Serverless FrameworkとTerraformの使い分けについて](https://www.ariseanalytics.com/activities/report/20230922-2/)
- [**Serverless FrameworkとTerraformの責任分界点**](https://qiita.com/naomichi-y/items/10bc4874cc1a6ec35663)