COLUMN
2023年02月27日
FaaSとEdge Functionの相違点を解説
カテゴリー:システム開発, テクノロジー
タグ:FaaS, システム開発
AWS LambdaからはじまったFaaS(Function as a Service)は、現在では多くのパブリッククラウドで提供されています。
そうした中で、進化した形で登場したのがEdge Functionです。いわゆるCDN上で実行される処理であり、FaaSの一形態とも言えます。
本記事ではEdge FunctionとFaaSの相違点、そして使い方について解説します。
主なEdge Functionサービス
有名なところでは以下のようなサービスがあります。
- AWS CloudFront Functions
- AWS Lambda@Edge
- Cloudflare Workers
- Deno Deploy
- Fastly Compute@Edge
- Netlify Functions
- Vercel Edge Functions
AWSは2種類のEdge Functionサービスを提供しています。その相違点についてはCloudFront Functions vs. Lambda@Edge — Which One Should You Choose? | by Arthur Knoepflin | TrackIt | Mediumに詳しいですが、CloudFront Functionsはリクエストボディにアクセスできなかったり、ネットワークアクセスできないなどの有無が挙げられています。
FaaSとEdge Functionの似ているところ
FaaSとEdge Functionは、どちらもクラウドにプログラムコードをデプロイして実行するという点において変わりはありません。開発者はスケーリングを気にすることなく、コードを実行できます。多くの場合、無料枠が用意されており、それを超えるとリクエスト数や実行時間での課金になります。
FaaSとEdge Functionの違うところ
ここからはFaaSとEdge Functionの違う部分について紹介します。
サポートされる言語について
FaaSではNode.js/Python/Java/Rubyなど様々な言語がサポートされることが少なくありません。それに対してEdge Functionでは制限されることが多いです。
多くの場合、JavaScriptがサポートされます。他の言語としては以下のようになっています。
- Python(AWS Lambda@Edge)
- TypeScript(Netlify Functions、Deno Deploy)
- AssemblyScript・Rust(Fastly Compute@Edge)
- WebAssembly(Vercel Edge Functions、Deno Deploy)
JavaScriptもNode.jsではなく、ブラウザ向けのV8エンジンが使われていることが多いようです。その場合、利用できるAPIに多少の違いがあるので注意が必要です。
利用できるリソースについて
FaaSはサービスによって異なりますが、最長30秒程度実行できます。それに対してEdge Functionは数十msまでしか実行できないものが多いです。そのため、外部サービスへ接続したり、データベースに接続するような余裕はありません。
さらに実行するスクリプトサイズの制限も強いです。場合によっては10KB程度という場合もありますし、割と制限の緩いCloudflare Workersであっても1MB(フリー)または5MB(課金)となっています。
メモリ、実行時間、そしてスクリプトサイズ(パッケージサイズ)のいずれもFaaSと比べて小さいのが特徴です。
スタンバイについて
Edge FunctionはCDNのエッジにデプロイされます。そして、ホットスタンバイしているのが特徴です。FaaSでは一定時間アクセスがないとコールドスタンバイになり、レスポンスが返ってくるまでしばらく待たされることがありますが、Edge Functionは常に高速です。
利用用途について
FaaSは通常のサーバー・インスタンスの代わりを想定して使われますが、Edge Functionはオリジンサーバーよりも前に実行されるので、プロキシーやBasic認証、言語判定によるリダレイクトなどの利用が想定されています。
エッジコンピューティングのユースケース | FastlyによればA/Bテストやウェイティングルームトークン、APIパフォーマンス強化などが挙げられています。
Cloudflare Workersはもう少し柔軟にSSRやOGP画像の生成などでも使われています。
まとめ
FaaSとEdge Functionは似ているようで、制限や利用目的が異なります。どちらを使うのが良いかは要件によって変わるでしょう。小さなスクリプトを高速に動作させる場合にはEdge Functionがお勧めで、より広い用途での利用はFaaSになるでしょう。
各Edge Functionのサイトではユースケースも紹介されていますので、それらが目的に合う場合には採用を検討する価値がありそうです。