COLUMN
2023年01月30日
フロントエンド開発にも役立つ。FaaS/エッジコンピューティングまとめ
カテゴリー:システム開発, テクノロジー
タグ:システム開発, フロントエンド
サーバーレスの文脈でよく言われるのがFaaS(Function as a Service)です。サーバーではなく、コード(関数)をクラウドにアップロードして実行する仕組みなのでサーバーレスと言います。
元々AWS Lambdaが登場してから一気に広まったFaaSですが、現在は多くのサービスが存在します。そうしたFaaSについて、特徴をまとめて紹介します。なお、FaaSとエッジコンピューティングが混在してしまっていること、ご了承ください。
AWS Lambda
FaaSで最も有名なサービスです。単体で利用することはあまりなく、他のAWSと組み合わせて利用されます。例えばAPI Gatewayと組み合わせたり、S3のファイル追加をトリガーにしたりします。
利用できる言語はJava、Go、PowerShell、Node.js、C#、Python、Rubyがあります。プロジェクトサイズによりますが、クラウドでコードを書いてそのままデプロイ・実行できるのでとても手軽です。エッジで実行する場合にはCloudFront Functionsが利用できます。
AWS Lambda(イベント発生時にコードを実行)| AWS
Cloud Functions | Google Cloud
Google Cloudの提供するFaaSです。毎月200万回まで無料で利用できます。言語はNode.js、Python、Go、Java、.NET、Ruby、PHPがサポートされています。
関数をデプロイするとHTTPアクセスできるURLが発行されるので、他のサービスと比べるとシンプルに使い始められる印象です。
Cloud Functions | Google Cloud
Cloud Functions | オラクル
Oracle Cloud Infrastructure上で動作するFaaSがOracle Cloud Infrastructure(OCI)Functionsです。関数は自動的にDockerコンテナ上で動作し、Dockerfileを編集して細かな制御も可能です。
利用できる言語はPython、Go、Java、Nodeとなっています。Dockerfileを使うことで、別な言語でも利用可能かも知れません。
Cloud Functions | オラクル | Oracle 日本
IBM Cloud Functions
処理時間0.1秒単位での課金になります。より厳密なコスト管理ができるでしょう。デフォルトで対応している言語はNode.js/Swift/Java/Ruby/Python/Go/PHP/.NETとなっており、IBMが力を入れているサーバーサイドSwiftがあるのが特徴です。
Dockerにも対応しているので、上記以外のプログラミング言語でも利用できます。HTTP以外のIBM Cloud上でのイベントをハンドリングして処理を行えます。
Azure Functions
Azure Functionsが対応する言語はC#/F#/Node.js/Java/Power Shell/Python/TypeScriptです。特にユニークなのはVisual Studio Code上でコードを書いて、そのままデプロイできる機能です。ログもVisual Studio Code上で確認できます。
ローカルで実行したり、ブレイクポイントを追加して変数を確認したりするのもVisual Studio Code上でできるので、開発効率は高いです。
Azure Functions – コンピューティングでのサーバーレス関数 | Microsoft Azure
Deno Deploy
Deno Deployは他のFaaSと異なり、Denoでコードを書けます。DenoはNode.jsと多少異なるJavaScript実行環境になります。月10万リクエストまで無料で利用できます。
GitHubやGitLabと連携し、コードをプッシュすると自動的に反映されます。また、専用コマンドを使ってデプロイできます。ブラウザでログをライブ表示する機能があるので、開発はスムーズです。
Cloudflare Workers
Cloudflare WorkersはNode.jsではなく、ブラウザ互換のAPIを提供しています。ブラウザのWeb Workersのようにコードが書け、エッジで実行できます。
Cloudflareが提供するデータベースやストレージを使うことで、キャッシュのように利用できます。メール受信のハンドリングができる点がユニークです。
Fastly Compute@Edge
CDNのFastlyが提供するエッジコンピューティング環境がFastly Compute@Edgeです。対応している言語はRust/JavaScript/Go/AssemblyScriptとなっています。
各言語向けにSDKが提供されていたり、専用コマンドもあるので開発からデプロイまでの体験はとても良いです。
サーバーレスコンピューティング環境 | Fastly Compute@Edge | Fastly
ニフクラ スクリプト
日本のパブリッククラウドであるニフクラでもスクリプトという名称でFaaSを提供しています。利用できる言語はNode.jsまたはRubyとなっています。
スクリプトをアップロードするとHTTPアクセスできるURLが作成されます。何かのイベントをトリガーにして実行できる訳ではないようです。
静的ホスティングサービス用
静的ホスティングではFaaSと相性が良いです。静的にホスティングされたWebサイトに対して、ちょっとした動的機能を追加したい時にFaaSが利用されます。
Cloud Functions for Firebase
Google Cloud FunctionsをFirebase向けに提供しているのがCloud Functions for Firebaseです。Firebase CLIから関数を作成し、ローカルでのテスト実行、デプロイまでできます。
Firebaseプロジェクトを作成すれば、Functions用のフォルダも作成され、すぐに利用できます。
Firebase向けのクラウド機能 | Cloud Functions for Firebase
Vercel Serverless Functions
Next.jsのホスティングサイトとして最も有力であるVercelでもFaaSが提供されています。サポートされているのはNode.js/Go/Pythonのみになります。
ただしVercel Serverless Functions自体がAWS Lambdaを利用していることもあり、上記以外の言語をランタイムによって実行できます。
Serverless Functions – Vercel Docs
Netlify Functions
NetlifyではFaaSであるNetlify Functionsと、エッジで実行するNetlify Edge Functionsの2つが用意されています。Netlify Edge FunctionsはCloudflare Workersに近いものになるでしょう。また、Netlify Edge FunctionsはDenoで提供されています。
Netlify FunctionsはAWS Lambdaを利用していますが、対応言語としてはJavaScript/TypeScript/Goとなっています。
まとめ
パブリッククラウドベンダーではほぼすべてFaaSを提供しているようです。そしてそれを使って静的ホスティングサービスもFaaSを提供しています。なお、静的ホスティングサービスの場合はHTTPアクセス可能で、CORSによって利用できるアクセス元を制限しています。
そしてエッジコンピューティングがCDN各社によって提供されています。こちらは従来のFaaSとは異なる実行環境の場合が多いので、また違った使い方が生まれそうです。