どちらもサーバーレスを謳うサービスなのですが使い分けはどうなのでしょうか。
実行環境
Lambda
使用できるランタイムは決まっている。デプロイ環境にも制約がある(というかデプロイするものではない)のでフロントエンドでNext.jsやNuxt.jsなどのSSRの実行環境では使えないです。ECSを使っていくことになると思います。
ただ、PHPのLaravelやRubyのRailsなどのモノシリックフレームワークの場合はこちらでも使えます。(一部言語によっては対応していないフレームワークもあるので注意です。Node.jsなど。)
ECS on Fargate
ユーザーが用意したDockerコンテナを使用してアプリケーションを実行することができるため、開発言語に制限がなく、実行環境の構築の自由度が高い。
もしインフラの柔軟性が求められるのであればこちらの方が良いと思います。
学習コスト
Fargateはコンテナやコンテナオーケストレーションの知識が必要だが、Lambdaは関数や実行OSに関する知識を抑えるだけなので学習コストが低め。
料金
常時コンテナに料金がかかってくるのでFargateの方がかなり高い。Lambdaはリクエストがあった分だけコストがかかってくる。(少ないリクエスト数のアプリケーションであれば実質無料になります。)
アプリケーション移行コスト
もし、既存アプリケーションがコンテナベースで動作しているアプリケーションであればFargateもlambdaも移行コストは変わらないかもしれません。コンテナベースではないのであれば関数を定義するだけで済むLambdaに軍配が上がるでしょう。
リソース
Lambda
Lambda関数のメモリ割り当てなどの変更は可能。
Fargate
割り当て可能なvCPUとメモリの組み合わせは用意されていてユーザーは選択する。
ユースケース
基本的には、まずLambdaで実現できないかを考えてLambdaで実現が難しいことはFargateに任せるという思考で考えると良いでしょう。
Lambda
- 普通のCRUDのあるWebアプリケーション(イベントトリブン)の利用
- 小規模のアプリ
- 短い処理(処理時間15分以下)
Fargate
- 何十分もかかるような重たい処理や、長時間動作が必要なWebやモバイル、Paasなどのバックエンド開発
- 容量の大きいファイルを扱う処理
- docker-composeを利用したい場合
この記事へのコメントはありません。