はじめに
サーバーレスコンピューティングは、クラウドコンピューティング分野において比較的新しい進化です。サーバーレスプロバイダーは、開発者が実行環境やその他の低レベルのレイヤーを心配することなく、アプリケーションが必要とする機能に集中できるようにします。
この記事では、最も人気のあるサーバーレスプロバイダーのいくつかを取り上げ、異なるカテゴリでどのように比較されるかを分析します。オプションを学ぶことで、選択肢を評価し、ニーズに最適なサービスを選ぶためのより良い立場に立つことができます。
各サービスに共通する点、異なる点、そしてどちらかを選ぶ可能性のある基準について説明します。すべてのユーザーに適した単一のサーバーレスプロバイダーは存在しませんが、この内訳は、優先順位に基づいて候補を評価しやすくするための基準を強調することを意図しています。
Prisma Data Platformをチェックして、すべてのアプリケーションデータを一元管理しましょう。
プロバイダーと評価基準の概要
他のオプションも
- AWS Lambda
- Microsoft Azure Functions
- Google Cloud Functions
- Cloudflare Workers
- Netlify Functions
- Vercel Functions
これらの各製品は、サーバーレスコンピューティングの実装を表しています。サーバーレスコンピューティングとは何か、どのようなメリットがあるのかをより詳しく理解するために、私たちの「サーバーレスとは?」の記事をご覧ください。
ここでは、コンテナベースのソリューションについては議論しないことに注意してください。コンテナサービスは広く普及しており、多くの場合、サーバーレスコンピューティングが提供する価値の一部と重複しています。しかし、コンテナベースのエコシステムは、短命で需要志向のサーバーレスのユースケースよりもはるかに広範であるため、範囲を限定するために、この狭い設計に適合するソリューションに焦点を当て続けます。
さまざまなプロバイダーが提供するサービスを説明する際には、各オプションを同じ一般的なカテゴリで比較できると便利です。このガイドでは、これらの各サーバーレスプラットフォームを次の観点から比較します。
- 焦点:プロバイダーのサービスの主な目標は何ですか?一般的な提供物ですか、それとも市場の特定の側面に焦点を当てていますか?
- 機能:そのプラットフォームは、他のものとは一線を画す独自のセールスポイントを提供していますか?
- 言語サポート:関数はどの言語をサポートしていますか?
- 成熟度:サービスはどれだけ十分にテストされ、どれくらいの期間信頼性が証明されていますか?
- 価格:サービスの利用にはどれくらいの費用がかかりますか?無料枠と有料枠はありますか?使用量はどのように計算されますか?
- 制限:ワークロード実行の制限と上限は何ですか?実行時間、リクエストとレスポンスのサイズ、1日または1ヶ月あたりの実行回数などのしきい値は?
また、サーバーレス戦略を改善するのに役立つサーバーレスデータベースのような、サーバーレスコンピューティングに関連する技術についても簡単に説明します。以下のプロバイダーとサービスについて言及します。
- Amazon DynamoDB および Aurora Serverless
- Microsoft Cosmos DB Serverless および Azure SQL Serverless
- Google Firestore
- PlanetScale
- MongoDB Atlas Serverless
- CockroachDB Serverless
- Fauna
- Neon
最後に、サーバーレスアプリケーションを構築する際に注目すべき新しいツールやサービスをいくつか紹介します。現時点では本番環境での利用には適さないかもしれませんが、すぐに価値を提供できるようになる可能性があります。
- Deno Deploy
- Prisma Accelerate
これらのカテゴリを念頭に置いて、利用可能なサービスを見ていきましょう。
AWS Lambda
概要
- リリース日 2014
- 焦点: 一般的なサーバーレスコンピューティング。AWSサービスとの統合。
- 言語サポート: 幅広い
- 成熟度: 成熟
- 価格: 呼び出しとリソース消費量による。エッジデプロイメントまたはプロビジョニングされたウォームインスタンスには追加費用。
一般的な説明
サーバーレス分野で最もよく知られたプロバイダーは、おそらくAWS Lambdaでしょう。2014年に導入されたAmazonのLambdaサービスは、他のサービス提供からの既存の顧客基盤が大きな要因となり、主要な市場の関心を集めた最初のプロバイダーの一つでした。
AWS Lambdaは、その安定性、機能の幅広さ、そして一般的な認知度から、他の製品と比較される主要なサービスであり続けています。
焦点
AWS Lambdaは、一般的なサーバーレスプラットフォームです。特定の問題解決に重点を置くのではなく、イベント駆動型のワークフローに利用できるプラットフォームを提供することに焦点を当てています。
Amazonの広範なサービスカタログのため、Lambdaは他のAWSサービスとの互換性と統合に重点を置いています。
機能
AWS Lambdaは、あらゆるサーバーレスプロバイダーから期待できる基本的な機能以上のものを提供します。このサービスは時間の経過とともに柔軟性と強力さを増し、競争力を維持し、新鮮さを保っています。
以下にその特徴の一部を紹介します。
- 任意の実行可能ファイル:言語固有の関数を扱うのではなく、任意の実行可能ファイルを実行するようにLambdaサービスを設定し、イベントを処理できます。
- カスタムランタイム:ユーザーは、Amazonがネイティブに提供するランタイム以外に、独自の言語ランタイムを実装できます。
- プロビジョニングされた同時実行:イベント時にリソースを割り当てるコールドスタート問題を軽減するために、イベントハンドラーを起動してスタンバイ状態に保つ機能です。
- 永続性への容易なアクセス:ユーザーはAmazonのRDS Proxyを使用して、関数からセキュアにデータベースインスタンスに接続し、Elastic File Systemを使用してファイルベースのデータを保存できます。
言語サポート
執筆時点で、AWS Lambdaは以下のネイティブ言語ランタイムを提供しています。
- Node.js: 10, 12, 14
- Python: 2.7, 3.6, 3.7, 3.8, 3.9
- Ruby: 2.5, 2.7
- Java: 8, 11
- Go: 1.x
- .Net Core: 2.1, 3.1
さらに、前述のとおり、独自のカスタムランタイムを提供することで、利用可能なランタイムサポートを自由に拡張できます。
成熟度
AWS Lambdaは、その稼働期間から、今日利用可能なサーバーレスプラットフォームの中で最も成熟していると言えるでしょう。信頼性が高く、様々な規模のワークロードを処理できることが証明されています。
価格
AWS Lambdaは、ミリ秒単位で追跡されるリソース使用量に基づいて課金されます。残念ながら、全体的な価格に影響する要因が非常に多いため、AWS Lambdaの実行にかかる総コストを事前に計算することは困難な場合がよくあります。
総費用は、いくつかの要因に基づいています。
- 関数を実行するアーキテクチャ:x86またはArm。これは、リクエスト数と各リクエストの期間に基づいて課金されます。
- 関数に割り当てられるメモリ量:128MBから10,240MBまで、1MB単位で割り当てられます。
- プロビジョニングされた同時実行の使用:パフォーマンス向上のために同時実行をプロビジョニングすることを選択した場合、追加の同時実行にはより多くの費用がかかります。
- 関数との間で転送されるデータ量
- Lambda@Edgeの使用:関数をクライアントに近づけてデプロイする場合、その追加サービスに対して課金されます。
制限
サーバーレスプロバイダーは、通常、関数やアカウントが消費できるリソースに制限やクォータを設けています。AWS Lambdaの主な上限は以下のとおりです。
- 関数メモリ: 1MB単位で設定可能、128MB~10240MB
- 関数タイムアウト: 900秒(15分)
- 関数レイヤー: 5
- 関数バースト同時実行数: 地域によって500~3000
- リクエストおよびレスポンスサイズ: 同期で6MB、非同期で256KB
- デプロイサイズ: ZIP圧縮で50MB、解凍で250MB
まとめ
AWS Lambdaは、サーバーレスアプリケーション構築のための堅牢で成熟したプラットフォームです。他の多くのプロバイダーよりも経験が豊富であり、サーバーレス分野の多くの機能や進化において依然としてリードしています。
他のAWSサービスとの統合により、Amazonのエコシステムに既に存在する人々にとっては当然の選択肢となります。残念ながら、AWSサービスがしばしば批判されるコスト予測の困難さも引き継いでいます。
しかし、全体として、AWS Lambdaはサーバーレス関数にとって強力で一般的な選択肢です。競争力を維持するために、今後も機能と統合を追加する傾向が続くでしょう。
Microsoft Azure Functions
概要
- リリース日 2016
- 焦点: 一般的なサーバーレスコンピューティング。Azureサービスとの統合。
- 言語サポート: 幅広い
- 成熟度: 成熟
- 価格: 呼び出しとリソース消費量による。段階的なバンドルが利用可能。
一般的な説明
Microsoft Azure Functionsは、2016年にリリースされたAzureクラウドエコシステムのサーバーレスサービスです。AWS Lambdaが先行していたものの、Microsoftは、その例を参考に、独自の料金戦略、ポジショニング、機能を開発することができました。
Azure Functionsは、AWS Lambdaと同じニッチをサービスカタログで埋めることを目指しているため、多くの点で類似した製品です。それでも、Microsoftの提供するものを区別する重要な違いがいくつかあります。
焦点
Microsoft Azure Functionsは、イベント駆動型アプリケーションの実行を目的とした汎用サーバーレスプラットフォームです。柔軟で汎用的なツールとして開発されましたが、Azure FunctionsはAzureエコシステム全体を念頭に置いて設計されています。
機能
Azure Functionsは、サーバーレスプラットフォームに期待されるすべての標準機能を提供します。加えて、提供する興味深い機能には以下があります。
- 様々なデプロイオプション:Azureは、ニーズに応じて機能をバンドルしたサーバーレス機能のための様々なプランを提供します。
- 拡張可能なバインディング:異なるワークフローや統合をサポートするために、プラットフォームに拡張機能を追加できます。
- 統合HTTPエンドポイント:Azure Functionsは、HTTPエンドポイント管理がすぐに利用できる状態で提供されます。
言語サポート
Azure Functions は、以下の言語ランタイムをネイティブにサポートしています。
- C#: .Net Framework 4.8, .Net Core 2.1 および 3.1, .Net 5.0 および 6.0
- JavaScript: Node.js 6, 8, 10, 12, 14
- F#: .Net Framework 4.8, .Net Core 2.1 および 3.1, .Net 6.0
- Java: 8, 11
- PowerShell: PowerShell Core 6, PowerShell 7.0
- Python: 3.6, 3.7, 3.8, 3.9
- TypeScript: (JavaScriptにトランスパイルされます)
軽量なWebサーバーをカスタムハンドラーとして実行することで、追加の言語やランタイムもサポートできます。
成熟度
Azure Functionsは、登場から時間が経ち、成熟してきました。Azure Functions製品は、最初の提供から繰り返し改善され、現在では、ほとんどのユースケースで良好なパフォーマンスを発揮する、かなり安定した製品となっています。それでも、Microsoftの製品は、Amazonの製品にまだ追いつこうとしているように感じられることが多く、これは一部の人々にとっては重要かもしれません。
価格
コスト面では、MicrosoftのAzure FunctionsはAmazon Lambdaの料金とほぼ同じになります。同様のパターンで、Azure Functionsは実行回数と関数処理に割り当てられたリソースに基づいて課金されます。
Azure Functionsが異なる点としては、次のものが挙げられます。
- 割り当てられたメモリではなく、使用されたメモリのみを課金する
- 同じ実行インスタンスで複数の関数を実行した場合でも、使用されたリソースは一度だけ課金される
さらに、Azure Functionsは、さまざまな種類の利用に応じたプランを提供するために、段階的な料金モデルを提供しています。
- 消費プラン:イベント駆動型の自動スケーリング実行による従量課金モデルのクラシックなサーバーレス提供
- プレミアムプラン:コールドスタートを回避するために、追加の予約容量とリソース割り当てを高い料金で追加します。
- 専用プラン:関数ホストは停止しないため、コールドスタートは発生しません。
制限事項
Microsoft Azure Functionsの制限は、使用しているプランの種類によって異なります。関数に割り当てられるリソースの一部は以下のとおりです。
- スケール:消費プランでは最大200インスタンス、プレミアムでは100インスタンス、専用プランでは10~20インスタンス
- 関数の最大実行時間:消費プランでは10分、プレミアムおよび専用プランでは無制限
- 最大リクエストサイズ:100 MB
- 最大メモリ:消費プランでは1.5 GB、プレミアムプランでは3.5~14 GB、専用プランでは1.75~14 GB
概要
全体として、Microsoft Azure Functionsは、一般的なサーバーレスアプリケーションにとって素晴らしい選択肢です。Microsoftは、Functionsと連携して利用できるサービスとツールのエコシステム全体を持っています。さらに、リソースの割り当てやコスト予測において、もう少し柔軟性があります。
結局のところ、Microsoft Azure Functionsの選択は、クラウド環境に関する他の選択と似ているでしょう。サービスそのものだけでなく、エコシステム全体に関心があるかどうかも重要です。Windowsに特化した開発技術を使用している開発者や、Azureベースのサービスに依存している開発者にとって、Azure Functionsは他のツールともうまく連携する素晴らしい選択肢を提供します。
Google Cloud Functions
概要
- リリース日 2016
- 焦点: 一般的なサーバーレスコンピューティング。GCPサービスとの統合。
- 言語サポート: 幅広い
- 成熟度: 成熟
- 価格: 呼び出しとリソース消費量による。関数ストレージには追加料金。
一般的な説明
Google Cloud Functionsは、Google Cloud Platformで利用可能な汎用サーバーレスソリューションです。2016年にリリースされたGoogle Cloud Functionsは、数年前にAWS Lambdaによって生まれたギャップを埋める役割を果たしました。
Google Cloud Functionsは、競合するクラウドプラットフォームが提供する一般的な製品モデルを踏襲し、管理不要で機能をデプロイするための高性能で安定したプラットフォームを提供します。他のプロバイダーと同様に、Googleのカタログ内の他のサービスとの統合にも注意が払われており、すでにエコシステムに投資しているユーザーを補完します。
焦点
Google Cloud Functionsは、一般的なサーバーレスアプリケーションのためのプラットフォームを提供することに焦点を当てています。特化されたものではなく、主にアプリケーション開発者がGoogleのクラウドにサーバーレス関数をデプロイするための信頼できるターゲットとプラットフォームを提供しようとしています。
機能
標準的なサーバーレス機能以外に、Google Cloud Functionsはいくつかの差別化された機能を提供します。
- 分散トレースとデバッグ:GoogleのCloud TraceおよびCloud Debuggerツールとうまく連携するように設計されています。
- 統合HTTPエンドポイント:Google Cloud Functionsは、HTTPエンドポイント管理がすぐに利用できる状態で提供されます。
言語サポート
執筆時点で、Google Cloud Functionsは以下のネイティブ言語ランタイムをサポートしています。
- Node.js: 8, 10, 12, 14, 16
- Python: 3.7, 3.8, 3.9
- Go: 1.11, 1.13, 1.16
- Java: 11
- .Net Core: 3.1
- Ruby: 2.6, 2.7
- PHP: 7.4
他のプロバイダーと同様に、Google Cloud Functionsではカスタムランタイムを指定して、より幅広い言語サポートを利用することもできます。
成熟度
Google Cloud Functionsは、導入以来、成熟し安定するための時間を費やしてきました。一般的に、他のGCPサービスに匹敵する安定性を提供することが期待できます。Googleの提供するものは、他のクラウドプロバイダーのソリューションにやや遅れをとっているように見えますが、それでも堅実な実装であり、サーバーレスコードをデプロイする信頼できる場所です。
価格
Google Cloud Functionsの実行にかかる費用は、他のプロバイダーと同様に、リソース使用量と実行回数の両方で計算されます。全体として、これはAmazonやMicrosoftの提供するものとほぼ同じ価格になります。
Google Cloud Functionsで留意すべき点の1つは、関数自体がGoogle Container Registryに保存されており、顧客はこれに料金を支払う必要があるということです。したがって、実行コストに加えて、Googleのエコシステム内に関数をアップロードして保存するためのコストが発生します。
制限
Google Cloud Functionsには、プラットフォームで実行されるアクションに対して以下の制限とクォータがあります。
- リージョンあたりの関数数: 1000
- デプロイサイズ: ソースの圧縮で100 MB、ソースとモジュールを含む解凍で500 MB
- HTTPリクエストサイズ: 10 MB
- HTTPレスポンスサイズ: 10 MB
- 関数メモリ: 8192 MB
- 関数タイムアウト: 540秒
- 関数同時実行数: 3000
- 関数呼び出しレート: 1秒あたり1000
まとめ
Google Cloud Functionsは、サーバーレス市場で有力な競争相手であり、特にGCPの他のサービスをすでに活用している場合には、一般的なワークロードに適しています。他の大規模なクラウドプロバイダーと同様に、他のサービスと密接に統合されているため、他の製品イベントに応答する関数の設定や、関数内で他のサービスを呼び出すことは簡単です。
Microsoftと同様に、Googleはサーバーレス分野でAmazonの先導にまだ追従しているように見えます。8GBという関数のメモリクォータは、これまで見てきた他の主要なクラウドよりもかなり低く、これは特定のワークロードにとっては要因となる可能性があります。しかし、全体として、Google Cloud Functionsは一般的なサーバーレスデプロイメントのための優れたプラットフォームです。
Cloudflare Workers
概要
- リリース日 2018
- 焦点: エッジコンピューティングとパフォーマンスコンピューティング。
- 言語サポート: JavaScriptにコンパイル可能、WASM互換言語。
- 成熟度: 新しい
- 価格: 呼び出しと期間による。異なるプランが利用可能。
一般的な説明
Cloudflare Workersは、Cloudflareが提供するサーバーレスオプションで、Functions-as-a-Serviceモデルとエッジコンピューティングを組み合わせています。2018年にリリースされたCloudflare Workersは、一般的なクラウドプロバイダーというよりもWebツール企業であるという特性から、異なる角度から問題に取り組むことを決定しました。
Cloudflare Workersは、その実装の詳細と自己imposedな制限により、開発者にとって低コストで高性能を提供できます。アプリケーションがCloudflare Workersのパラダイムに適合する場合、クライアントへの低遅延応答を提供するのに最適な選択肢です。
Prismaを使用してすべてのリクエストをMongoDBデータベースに保存し、後で検査するためのCloudflare Workerのデプロイ方法については、Prismaのドキュメントで詳しく説明されています。
焦点
一般的なクラウドプロバイダーが提供するサーバーレスソリューションとは異なり、Cloudflare Workersははるかに限定された焦点を持つサービスです。Cloudflare Workersは、関数をクライアントのできるだけ近くにデプロイすることで、高パフォーマンスと低レイテンシの実行に主に関心を持っています。
彼らは、高度に分散されたデプロイ場所だけでなく、実行される環境のおかげでもパフォーマンスを達成できます。Cloudflare Workersは、Node.jsを介したり、別のランタイム上で実行したりする代わりに、Chrome V8を直接使用して関数を実行します。これにより、ランタイムによってではなくコードが直接実行されるため、より高速なパフォーマンスを提供し、コールドスタート問題などのサーバーレスの一般的な問題を回避できます。
機能
Cloudflare Workersはサーバーレス分野への異なるアプローチを提供するため、従来のクラウドプラットフォームとは異なる機能セットを持っています。
- 高速実行サポート:Cloudflare Workersは、Node.jsのような従来のJavaScriptランタイム環境ではなく、V8で直接高速に実行されます。
- 低レイテンシー:サーバーレス関数は世界中の200以上の場所にグローバルに分散されているため、クライアントのレイテンシーが著しく低くなることがよくあります。
- 自然なサンドボックス化:V8上で実行する利点の1つは、関数がより高いレイヤーで分離する必要なく、互いに自動的に分離されることです。
- 使い慣れたAPIを使用:Cloudflare Workersは、プログレッシブウェブアプリケーションで使用されるJavaScript Service Workersをモデルにしています。APIは可能な限り同じパターンを使用します。
言語サポート
Cloudflare WorkersはChrome V8ランタイムを使用するため、Web対応言語で記述されているか、コンパイル可能である必要があります。サポートされている言語は以下のとおりです。
- JavaScript
- TypeScript
- WebAssembly (WASM) にコンパイル可能な言語(例:)
- Rust
- C
- Cobol
- JavaScriptにコンパイル可能な言語(例:)
- Kotlin
- Dart
- Python
- Scala
- Reason/OCaml
- Perl
- PHP
- F#
成熟度
Cloudflare Workersは比較的新しいサービスであり、主要なクラウドプロバイダーに関連するほど大規模なエコシステムを構築するほど長く存在していません。しかし、そのパフォーマンスと実行モデルは多くの開発チームを惹きつけています。Cloudflareはこれに応え、より多くの言語のサポートを追加し、Cloudflare Workersが採用する概念モデルとプラットフォームでの関数の記述およびデプロイ方法の両方について開発者が学習を支援する広範なドキュメントを作成しています。
価格
Cloudflare Workersは、リクエスト数と各リクエストの実行時間の両方に基づいて課金されます。課金額は、ワーカーが「アンバウンド」プランまたは「バンドル」プランの一部であるかによって異なります。
バンドルプランには、月ごとの固定数のリクエストが含まれ、各リクエストの実行時間に制限があります。一方、アンバウンドプランには実行時間の制限はありませんが、リクエスト数と実行時間に対して課金されます。
Cloudflare Workersは、より従来の対応サービスよりも実行コストが低い傾向があります。V8実行モデルにより、単一のマシンで他のランタイム環境よりも多くの分離された関数をホストできます。この密度の向上により、Cloudflareは同じハードウェアでより大きな容量を処理でき、結果として課金されるコストも低くなります。
制限
Cloudflare Workersは、使用に関して以下の制限またはクォータがあります。
- HTTPリクエストサイズ:Cloudflare全体のプランによって異なります(FreeおよびProでは100MB、Businessでは200MB、Enterpriseでは500MB)
- 関数メモリ:128MB
- 関数実行時間:バンドルプランでは50msのCPU時間、アンバウンドプランでは最大30秒の実行時間に対して課金
- 関数呼び出しレート:制限なし
- デプロイサイズ:圧縮で1MB
お気づきかもしれませんが、Cloudflare Workersの期待される実行時間とリソース使用量に関しては、これまでのソリューションとは大きく異なります。これは、Cloudflareの環境に最適なワークロードの種類を示すヒントになるでしょう。
Cloudflare Workers独自のインフラストラクチャに起因するいくつかの制限も考慮することが重要です。重要な制限の1つは、TCP接続を行えないことです。これは、データベース接続やその他の外部接続が困難または不可能になる可能性があることを意味します。Cloudflareは、独自のカタログでこれらのニッチを埋めることを目的とした他の製品(Workers KV: キーバリューストア、R2: オブジェクトストア、Durable objects: 状態を維持するオブジェクト)を提供していますが、それがあなたのユースケースに適合しない場合があります。
V8ランタイムに固有のもう1つの制限は、Node.js標準ライブラリが利用できないことです。これにより、使用できるライブラリ関数の種類が制限されます。Node.js標準ライブラリに依存する関数を作成する予定がある場合は、この点に留意してください。
まとめ
Cloudflare Workersは、低遅延配信と高パフォーマンス実行環境により、多くのプロジェクトにとって非常に魅力的なソリューションです。このプラットフォームは、特にエッジで、小さく、焦点を絞った関数の迅速な実行を可能にするように設計されています。
Cloudflare Workersは、すべての種類のサーバーレスに最適なソリューションではないかもしれませんが、主にJavaScriptまたはTypeScriptで作業しており、すでにプログレッシブWebアプリの基礎知識がある人にとっては理想的なソリューションです。使い慣れた開発者体験、簡単なデプロイ、そしてスケーラブルな高性能実行環境は、多くのプロジェクトにとって素晴らしい選択肢となります。
Netlify Functions
概要
- リリース日 2018
- 焦点: Webアプリケーション統合。
- 言語サポート: 限定的
- 成熟度: 新しい
- 価格: 呼び出しと期間による。異なるティアが利用可能。
一般的な説明
Netlify Functionsは、Webアプリケーションの構築およびデプロイプラットフォームであるNetlifyが提供するサーバーレスサービスです。2018年にリリースされたFunctions製品は、実際にはAWS Lambdaの上に構築された付加価値サービスで、Netlifyエコシステムにサーバーレス機能を簡単に統合できるようにすることに焦点を当てています。
このポジショニングにより、他のサービスとは異なりますが、Netlify Functionsは、アプリケーション配信に焦点を当てた一貫したエコシステム内でサーバーレスを統合する方法が興味深いです。
Prismaで構築されたNode.JSアプリケーションをNetlifyに簡単にデプロイできます。このデプロイガイドでは、そのプロセスについて詳しく説明しています。
焦点
Netlify Functionsは、開発者が摩擦をほとんど感じることなくウェブアプリケーションをデプロイできるよう支援することに特化しています。サーバーレス機能を汎用ツールとして位置付けるのではなく、AWS Lambdaを目的達成のための手段として利用し、ビルドとデプロイのプロセスを簡素化しています。
Netlifyの専門分野に合致するプロジェクトの場合、Functions機能はワークフローとイテレーションサイクルを加速するのに役立ちます。しかし、その領域外のプロジェクトの場合、他のソリューションの方が良いでしょう。
機能
Netlify Functionsは、主にサーバーレス機能をウェブアプリケーションに統合することに焦点を当てています。その機能セットは、このユースケースを中心に構築されています。
- アプリケーションと共に機能をデプロイ:Netlify Functionsは、統合するアプリケーションのすぐ隣で開発および管理できます。
- プレビューとロールバック機能:ライブ環境にデプロイする前に機能をプレビューしてテストでき、問題が発生した場合はロールバックできます。
- A/Bテスト:フロントエンドアプリケーションコードとサーバーレス関数の両方の変更を比較できるA/Bテストを実行できます。
言語サポート
Netlifyの言語サポートは非常に限定的です。Netlifyは、AWS Lambdaで利用可能なオプションを、アプリケーション管理プラットフォームでサポートする意図のあるサブセットにさらに制限しています。
関数は以下の言語で記述できます。
- JavaScript
- TypeScript
- Go
成熟度
Netlify Functionsは比較的新しいサービスですが、AWS Lambdaの上に構築されているため、その成熟度の恩恵を受けています。実際のサーバーレス実行はAmazonによって処理されており、安定性と信頼性が実証されています。
しかし、接着機能とNetlifyの他のアプリケーションのビルドおよびデプロイ機能との統合は、Netlify自体が運営しています。Netlifyは基本的にAWS Lambdaの顧客として機能しているため、そのサーバーレスサービスの信頼性は、彼らの他の製品カタログの信頼性と同じくらい考慮されるべきでしょう。
価格
Netlify Functionsの料金は、発生したリクエスト呼び出し回数と実行時間に応じて課金されます。
料金体系を分かりやすくするために、Netlifyはコストと制限を計算するためのティア制を採用しています。これらのティアは、Netlifyがプラットフォーム向けに提供するプランと関連しており、一般的なプラットフォームレベルとサーバーレスレベルをある程度独立して選択できます。
サーバーレスの提供に関しては、提供されるティアは次のとおりです。
- レベル0:無料ですが、機能が制限されています。Starter(無料)またはPro(ユーザーあたり月額19ドル)のNetlifyプランで利用できます。
- レベル1:サイトあたり月額25ドル追加。Starter(無料)またはPro(ユーザーあたり月額19ドル)のNetlifyプランで利用できます。
- レベル2:Netlifyの一般プラットフォーム向けビジネスまたはエンタープライズプランに含まれています。
制限
サーバーレス機能に関連するしきい値は、NetlifyプランのレベルとNetlify Functionsのティアに直接関連付けられています。以下の制限が適用されます。
- 月間リクエスト数: レベル0は125,000、レベル1は200万、レベル2は無制限
- 月間実行時間: レベル0は100時間、レベル1は1,000時間、レベル2は無制限
- バックグラウンド(非同期)関数へのアクセス: Netlify Pro以上のA/Cで利用可能
- 関数タイムアウト: 同期関数は10秒、バックグラウンド(非同期)関数は15分
まとめ
Netlify Functionsは、より大規模なアプリケーション管理プラットフォーム内でサーバーレス機能を活用するのに最適な選択肢です。Netlifyプラットフォーム以外では利用できない、または有用ではありませんが、ビルドおよびデプロイのライフサイクル管理の残りの部分との密接な統合により、価値のあるオプションとなっています。
Netlify Functionsは、汎用サーバーレスソリューションを目指しているわけではありません。むしろ、開発ワークフローにAWS Lambdaを組み込む際のいくつかの厄介な部分をスムーズにすることを目指しています。サーバーレスを使用してウェブプロジェクトを拡張することに関心がある場合、Netlifyは直感的で簡単に行うための優れた選択肢です。
Vercel Functions
概要
- リリース日 2016
- 焦点: Webアプリケーション統合
- 言語サポート: 幅広い
- 成熟度: 新しい
- 価格: プラットフォームとバンドル
一般的な説明
Vercel Functionsは、Webアプリケーション開発者向けにサーバーレス体験を簡素化することを目的とした、もう1つのサービスです。Netlify Functionsと同様に、Vercel Functionsは、Webアプリケーションの開発と配信をより良い体験にするための総合プラットフォームの一部です。
Vercel Functionsには2種類あります。通常のサーバーレスサービスのように実行されるサーバーレス関数と、Vercelのエッジネットワークにデプロイされ実行されるエッジ関数です。この柔軟性により、各関数に最適なデプロイタイプを選択できます。
焦点
Vercel Functionsは、現代のウェブアプリケーションの開発、デプロイ、配信エクスペリエンスを向上させることに完全に焦点を当てています。その提供するサービスは、Vercelの他の機能と密接に統合されており、これらのワークフローに良いエクスペリエンスを提供します。
この焦点は、Vercel Functionsがウェブアプリケーション内でサーバーレスをより簡単に使用できるように設計されていることを意味します。したがって、あなたのプロジェクトがそのカテゴリに当てはまる場合、これは非常に有用です。このプラットフォームは、機能を追加し、パフォーマンスを向上させるためにこの機能を実装するのに役立ちます。
機能
Vercel Functionsの機能は、Vercel製品の他の部分と密接に関連しています。これには以下が含まれます。
- 2種類の関数:サーバーレス関数とエッジ関数により、各関数に最適なオプションを選択できます。
- ファーストクラスのNext.jsサポート:VercelはNext.jsの開発を担当しており、そのNext.jsエクスペリエンスを素晴らしいものにすることに大きな関心を持っています。
- アプリケーションと同時に関数をデプロイ:Vercel Functionsは、統合するアプリケーションのすぐ隣で開発および管理できます。
- 高速実行:VercelのEdge FunctionsはV8ランタイムを使用しており、より重いランタイムに比べて実行パフォーマンスが向上しています。
言語サポート
Vercel Functionsは様々な言語を実行できます。公式には、以下の言語をサポートしています。
- Node.js: 12.x、14.x
- Go: 1.16、
go.mod
ファイルを通じて代替設定可能 - Python: 3.6
- Ruby: 2.7.x、2.5.x
コミュニティは、さらに以下のものを提供することでこのリストを補完しています。
- Bash: GNUバージョン4
- Deno: サポートされている任意のタグ
- PHP: 8.0.3
- Rust
成熟度
Vercel Functionsの成熟度を評価するのは、サーバーレス関数とエッジ関数の間で分かれているため、やや複雑です。
Vercelのサーバーレス関数は、Netlifyがその機能をラップする方法と同様に、AWS Lambda上で実行されます。これらのケースでは、Lambdaの安定性がVercel自身の信頼性にとって資産となります。
VercelのEdge Functionsは、Amazon Lambdaのインフラストラクチャを使用していないように見える新しいサービスです。代わりに、Cloudflare Workersと同様にV8ランタイム上で直接実行されます。Edge Functionsはまだベータ版であるため、サーバーレス関数よりも安定性が低く、変更される可能性が高いと考えるべきです。
価格
しかし、これまでの他のすべてのプロバイダーとは異なり、Vercelのサーバーレスサービスは、その通常製品に完全にバンドルされています。サーバーレスサービスに対して別途料金は設定されていません。
とはいえ、Vercelの料金プランには以下が含まれます。
- Hobby: 非商用サイトは無料
- Pro: 月額20ドル/メンバー
- Enterprise: クライアントごとにカスタマイズされるプラン
制限事項
VercelのServerless Functionsの上限と制限は、ある程度AWS Lambdaから継承されています。制限事項には以下が含まれます。
- サーバーレス関数の実行時間: Hobbyは100 GB-時間、Proは1,000 GB-時間、Enterpriseはカスタム実行レベル
- サーバーレス関数の実行タイムアウト: Hobbyは5秒、Proは15秒、Enterpriseは30秒
- サーバーレス関数の呼び出し回数: 無制限
- Edge関数の1日あたりの呼び出し回数: Hobbyは100,000回、Proは500,000回、Enterpriseは500万回
- サーバーレス関数のデプロイサイズ: 圧縮時50 MB、非圧縮時250 MB
- サーバーレス関数のメモリ: Hobbyは1024 MB、Proは3008 MB
- サーバーレス関数のリクエストまたはレスポンスボディ: 5 MB
まとめ
Vercel Functionsは、Vercelプラットフォームを利用するウェブアプリケーション開発者にとって良いソリューションです。サーバーレス機能はプラットフォーム内に密接に統合されており、互換性を確保するためにNext.jsフレームワークと連携して開発されています。
Next.jsアプリケーションにサーバーレス機能が必要なユーザーにとって、Vercelは明白な選択肢です。他のウェブアプリケーション開発者にとっても、Vercel FunctionsとVercelプラットフォームの残りの部分は、サーバーレスのニーズとアプリケーションのライフサイクル管理の両方を支援できるかもしれません。
サーバーレスコンピューティング関連:サーバーレスデータベース
サーバーレスコンピューティング分野で最も一般的で興味深いプロバイダーのいくつかを取り上げてきましたが、他にも言及すべき関連サービスがあります。このセクションでは、サーバーレスコンピューティングのニーズを補完する可能性のあるサーバーレスデータベースのいくつかを紹介します。
サーバーレスデータベースがどのように機能するかについては、弊社の「サーバーレスとは?」記事で詳しく読むことができます。
Amazon DynamoDBとAurora Serverless
Amazonは、お客様のニーズに応じていくつかのサーバーレスデータベースサービスを提供しています。
AmazonのDynamoDBは、受信するリクエストのレベルに合わせて必要に応じてスケールアップおよびスケールダウンできるNoSQLサーバーレスデータベースソリューションです。キーバリューストアとして機能し、非常に迅速に応答およびスケーリングできます。
SQL指向のワークロード向けには、Amazonは需要に応じてデータ処理ユニットをスケーリングするサーバーレスリレーショナルデータベースソリューションであるAurora Serverlessを提供しています。
Microsoft Cosmos DB ServerlessとAzure SQL Serverless
Microsoftも同様に、サーバーレスデータベースに関するいくつかのオプションを提供しています。
Microsoft Cosmos DB Serverlessは、同社のNoSQL Cosmosデータベース用のサーバーレスティアです。いくつかの異なるNoSQLテクノロジーと互換性のあるマルチモデル操作を提供します。
リレーショナルデータ向けには、MicrosoftはAzure SQL Serverlessも提供しています。これは、同社のマネージドSQLデータベースサービスのサーバーレスティアであり、受信するリクエストに合わせて自動的にスケーリングします。
Google Firestore
GoogleのサーバーレスデータベースサービスはFirestoreです。Firestoreは、受信するクエリに必要な処理に自動的に対応するように設計されたNoSQLドキュメントデータベースです。開発および本番環境でアプリケーションを簡単に接続できる、ドキュメントベースのストレージ向けの「設定したら忘れる」オプションであることに重点を置いています。
PlanetScale
PlanetScaleは、Kubernetes環境でのスケーリング用に構築されたリレーショナルデータベース実装であるVitess上に構築された、MySQL互換のサーバーレスデータベースプラットフォームです。PlanetScaleは、バージョン管理されたデータブランチ、非ブロック型のスキーマ変更、およびその他の高度な機能を、シンプルなデプロイツールで提供できます。
PrismaとPlanetscaleが連携する方法について、詳細はこちらをご覧ください。
MongoDB Atlas Serverless
MongoDB Atlasは、MongoDBのホスト型マルチクラウドバージョンです。現在、サーバーレスモデルに従ってMongoDBデータベースと対話する方法として、MongoDB Atlas Serverlessを提供しています。このホスト型データベースのサーバーレスバージョンは、非常に変動が大きく頻度が低いワークロードに対応するためにシームレスなスケーリング体験を提供し、使用したリソースに対してのみ課金されます。
CockroachDB Serverless
CockroachDB Serverlessは、CockroachDBが新しく発表したサービスであり、その柔軟なSQLデータベースにサーバーレス機能を追加することを目指しています。このデータベースは、ユーザーの需要に応じて自動的にスケールアップおよびスケールダウンします。
Fauna
Faunaは、多様なクラウドベースのコンテキストで最新のアプリケーションと連携するように設計されたサーバーレスのトランザクションデータベースインスタンスを提供します。Faunaは、管理する必要があるインフラストラクチャの一部というよりも、ユーティリティとして機能するAPIベースのデータ操作を提供します。このモデルは、アプリケーションを構築するために既に利用しているサーバーレスパラダイムに完全に適合します。
Neon
Neonは、フルマネージドのサーバーレスPostgreSQLです。Neonはストレージとコンピューティングを分離することで、サーバーレス、ブランチ、無限ストレージなどの最新の開発者機能を提供します。
注目すべき新しいオプション
最後に、将来のために覚えておきたいツールとサービスをいくつか紹介します。これらはまだ始まったばかりですが、多くのサーバーレスプロジェクトで役立つ可能性を秘めています。
Deno Deploy
Deno Deployは、Denoが導入している新しいサーバーレスコンピューティングサービスです。Cloudflare Workersと同様に、Deno Deployを使用すると、ChromeのV8を実行するエッジサーバーにコードをデプロイできます。このランタイムの選択により、Cloudflare Workersと同じ多くの利点と制限があります(高密度とパフォーマンス、TCP接続の開放や完全なNode.jsライブラリの使用はサポートされていません)。
Deno Deployは、Deno CLIと同じテクノロジーを使用することで、統一された開発エクスペリエンスを提供することを目指しています。Deno Deployは現在ベータ版であるため、現在の進捗状況を確認し、頻繁にチェックすることをお勧めします。
Prisma Accelerate
Prisma Accelerateは、サーバーレス環境でのデータベースへの接続を簡素化するために設計されたツールです。サーバーレスプロバイダーが関数を実行するために使用するインスタンスは、本質的に一時的であるため、あまりにも多くの関数インスタンスが一度にアクティブになると、バックエンドデータベースへの接続プールを簡単に使い果たしてしまう可能性があります。
Prisma Accelerateは、データベースへの仲介役として機能することでこの問題の解決策を提供します。サーバーレスインスタンスは、リソースの競合によるサーバーレス呼び出しの失敗や遅延を避けるために接続プールを自動的に管理するPrisma Accelerateに接続できます。
まとめ
これまでに説明したサーバーレスサービスを要約するために、一目で比較しやすくするために詳細の一部を以下の表にまとめました。混乱を避けるため、サーバーレスコンピューティングオプションのみを含めます。
製品 | 焦点 | 言語サポート | 推奨される使用法 | 追加コメント |
---|---|---|---|---|
AWS Lambda | 汎用関数 | Node.js、Python、Ruby、Java、Go、.Net、カスタムランタイム | テクノロジー・スタックのどこかでサーバーレスが必要な状況、特にすでにAWSを使用している場合。 | AWS Lambdaは、利用可能な最も成熟したサービスです。定期的に新機能を導入し、Lambda@Edgeのような追加のニッチを埋めることに焦点を当てたバリエーションもあります。 |
Microsoft Azure Functions | 汎用関数 | .Net、Node.js、Java、PowerShell、Python、カスタムランタイム | テクノロジー・スタックのどこかでサーバーレスが必要な状況、特にすでにAzureを使用している場合。 | テクノロジーがMicrosoft中心であればMicrosoft Azure Functionsは理にかなっていますが、機能面ではAWS Lambdaに遅れをとる傾向があります。 |
Google Cloud Functions | 汎用関数 | Node.js、Python、Go、Java、.Net、Ruby、PHP、カスタムランタイム | テクノロジー・スタックのどこかでサーバーレスが必要な状況、特にすでにGCPを使用している場合。 | Google Cloud Functionsは、すでにGCPを使用している場合に良い選択肢ですが、他の一般的なプロバイダーよりも多くの制限があります。 |
Cloudflare Workers | パフォーマンスベースのエッジ関数 | JavaScript、TypeScript、WASMコンパイル可能言語(Rust、C、COBOL)、JavaScriptにコンパイル可能言語(Kotlin、Dart、Python、Scala、OCaml、Perl、PHP、F#) | 高パフォーマンスのエッジコンピューティング、特にJavaScriptまたはTypeScriptを使用する場合。 | Cloudflare Workersは、エッジ配信に焦点を当て、V8アイソレートを使用することで、他の一般的なプロバイダーとは大きく異なります。サーバーレスワークフローがこの実行モデルに適合する場合、Cloudflare Workersはより低いコストでより優れたパフォーマンスを提供できる可能性があります。 |
Netlify Functions | ウェブアプリケーション関数 | JavaScript、TypeScript、Go | ウェブアプリケーション、JAMスタックサイト、ヘッドレスCMS。 | Netlifyは、サーバーレス機能を完全なアプリケーションのビルドとデプロイ管理に統合することで、AWS Lambdaに価値を付加します。サーバーレスのニーズがそのユースケースに合致する場合、Netlifyはすべてを一元管理するための良い選択肢です。 |
Vercel Functions | ウェブアプリケーション関数 | Node.js、Go、Python、Ruby、Bash、Deno、PHP、Rust | ウェブアプリケーション、JAMスタックサイト、ヘッドレスCMS。 | ウェブアプリケーションのデプロイを強化するためにサーバーレスが必要な場合、Vercelは素晴らしい選択肢です。アプリケーションがNext.jsで構築されている場合は、統合が確実に行われるため、このことは特に当てはまります。 |
Prisma Data Platformをチェックして、すべてのアプリケーションデータを一元管理しましょう。