はじめに
サーバーレスコンピューティングは、クラウドコンピューティング分野における比較的最近の進化です。サーバーレスプロバイダーを利用することで、開発者は実行環境やその他の下位レイヤーを気にすることなく、アプリケーションに必要な機能に集中できます。
この記事では、最も人気のあるサーバーレスプロバイダーのいくつかを見て、さまざまなカテゴリ間でどのように比較されるかを分析します。オプションについて学んだ後、選択肢を評価し、ニーズに最適なサービスを選択できるようになります。
各サービスに共通する点、相違点、およびあるサービスを別のサービスよりも選択する理由となる可能性のある基準について説明します。単一のサーバーレスプロバイダーがすべてのユーザーに適しているわけではありませんが、この内訳は、優先順位に対して候補を評価しやすくするための基準を強調することを目的としています。
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サービスは、他のサービスオファリングからの組み込み顧客ベースが大きく貢献し、主要な市場の関心を捉えた最初のプロバイダーの1つでした。
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はAWS Lambdaの例を独自の価格戦略、ポジショニング、および機能を開発するための出発点として使用することができました。
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が異なる点は次のとおりです。
- 割り当てられたメモリではなく、使用されたメモリのみを課金する
- 同じ実行インスタンスで複数の関数を実行する場合に使用されるリソースに対して1回のみ課金する
さらに、Azure Functionsは、さまざまなタイプの使用量に対応するプランを提供するために、段階的な価格モデルを提供しています。
- 消費プラン:イベントドリブン、従量課金モデルによる自動スケーリング実行を備えたクラシックサーバーレスオファリング
- プレミアムプラン:コールドスタートを回避するために、追加の予約済み容量とリソース割り当てを追加します。より高価になります。
- 専用プラン:関数ホストはスピンダウンしないため、コールドスタートは発生しません。
制限事項
Microsoft Azure Functionsの制限事項は、使用しているプランの種類によって異なります。関数のリソース割り当ての一部には、次のようなものがあります。
- スケール:消費プランの場合は最大200インスタンス、プレミアムの場合は100インスタンス、専用プランの場合は10〜20インスタンス
- 関数の最大実行時間:消費プランでは10分、プレミアムプランと専用プランでは無制限
- 最大リクエストサイズ:100MB
- 最大メモリ:消費プランでは1.5GB、プレミアムプランでは3.5〜14GB、専用プランでは1.75〜14GB
まとめ
全体として、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のカタログにある他のサービスとの統合に注意が払われています。
焦点
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の後を追っているようです。関数で利用可能なメモリのクォータは8 GBと、これまで見てきた他の主要クラウドよりもかなり低いため、特定のワークロードの要因となる可能性があります。ただし、全体として、Google Cloud Functionsは一般的なサーバーレスデプロイメントに最適なプラットフォームです。
Cloudflare Workers
概要
- リリース 2018
- 焦点: エッジおよびパフォーマンスコンピューティング。
- 言語サポート: JavaScriptコンパイル可能およびWASM互換言語。
- 成熟度: 比較的新しい
- 価格: 実行回数と実行時間による課金。異なるプランが利用可能。
一般的な説明
Cloudflare Workers は、Cloudflareが提供するサーバーレスオプションであり、functions-as-a-serviceモデルとエッジコンピューティングを組み合わせたものです。2018年にリリースされたCloudflare Workersは、一般的なクラウドプロバイダーというよりもWebツール企業であるという立場から、異なる角度から問題に取り組むことにしました。
Cloudflare Workersは、実装の詳細と自己課した制限により、開発者に対して低コストで高性能を提供できます。アプリケーションがCloudflare Workersのパラダイムに適合する場合、クライアントに低遅延の応答を提供するための優れた選択肢となります。
すべてのリクエストをMongoDBデータベースに保存して後で検査するためにPrismaを使用する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は、プログレッシブWebアプリケーションで使用されるJavaScript Service Workersをモデルにしています。そのAPIは、可能な限り同じパターンを使用しています。
言語サポート
Chrome V8ランタイムのため、Cloudflare Workersは、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は、リクエストの数と各リクエストの実行時間の両方に基づいて課金されます。課金額は、ワーカーが「アンバウンド」プランまたは「バンドル」プランのどちらに属しているかによって異なります。
バンドルプランには、1ヶ月あたりのリクエスト数と各リクエストの実行時間の制限が含まれています。一方、アンバウンドプランには実行時間の制限はありませんが、リクエストの数と実行に費やされた時間の両方に対して課金されます。
Cloudflare Workersは、従来の同等のサービスよりも実行コストが安くなる傾向があります。V8実行モデルにより、単一のマシンで他のランタイム環境よりも多くの分離された関数をホストできます。この密度が高まることで、Cloudflareは同じハードウェアでより大きな容量を処理できるようになり、結果として請求するコストが低くなります。
制限事項
Cloudflare Workersには、使用量に関して以下の制限またはクォータがあります。
- HTTPリクエストサイズ: 全体のCloudflareプランによって異なります (FreeおよびProの場合は100 MB、Businessの場合は200 MB、Enterpriseの場合は500 MB)
- 関数メモリ: 128 MB
- 関数実行時間: バンドルプランの場合はCPU時間50ms、アンバウンドプランの場合は時間課金 (最大30秒)
- 関数呼び出しレート: 制限なし
- デプロイサイズ: 1 MB (圧縮)
お気づきかもしれませんが、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は、開発者が摩擦の少ないWebアプリケーションをデプロイできるようにすることに重点を置いています。サーバーレスサービスを一般的なツールとして位置付けるのではなく、AWS Lambdaを構築およびデプロイプロセスを簡素化するための手段として使用しています。
Netlifyの専門分野に合致するプロジェクトの場合、Functions機能はワークフローとイテレーションサイクルを加速するのに役立ちます。ただし、その領域外のプロジェクトの場合、他のソリューションの方が適切である可能性があります。
特徴
Netlify Functionsは、主にサーバーレス機能をWebアプリケーションに統合することに重点を置いています。その機能セットは、そのユースケースを中心に構成されています。
- アプリケーションと一緒に関数をデプロイ: 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以上のアカウントで利用可能
- 関数タイムアウト: 同期関数の場合は 10 秒、バックグラウンド (非同期) 関数の場合は 15 分
まとめ
Netlify Functionsは、より大きなアプリケーション管理プラットフォーム内でサーバーレス機能を活用するための優れた選択肢です。Netlifyプラットフォームの外部では利用できず、有用ではありませんが、ビルドおよびデプロイライフサイクル管理の残りの部分との緊密な統合により、価値のあるオプションとなっています。
Netlify Functionsは、一般的なサーバーレスソリューションを目指していません。代わりに、開発ワークフロー内でAWS Lambdaを組み込む際のいくつかの粗いエッジを滑らかにしています。Webプロジェクトを拡張するためにサーバーレスを使用することに興味がある場合、Netlifyはそれを直感的かつ簡単にする優れた選択肢です。
Vercel Functions
概要
- リリース 2016
- 焦点: Webアプリケーション統合
- 言語サポート:広範
- 成熟度: 比較的新しい
- 価格: プラットフォームにバンドル
一般的な説明
Vercel Functions は、Webアプリケーション開発者向けのサーバーレスエクスペリエンスを簡素化することを目的としたもう1つのエントリです。Netlify Functionsと同様に、Vercel Functionsは、Webアプリケーションの開発と配信をより良いエクスペリエンスにすることに焦点を当てた全体的なプラットフォームの一部です。
Vercel Functionsには、通常のサーバーレスサービスのように実行されるServerless Functionsと、Vercelのエッジネットワークにデプロイされて実行されるEdge Functionsの2種類があります。この柔軟性により、各関数に最適なデプロイタイプを選択できます。
焦点
Vercel Functionsは、最新のWebアプリケーションの開発、デプロイ、および配信エクスペリエンスを向上させることに完全に焦点を当てています。そのサービスは、これらのワークフローに優れたエクスペリエンスを作成するために、Vercelの他の機能と緊密に統合されています。
この焦点は、Vercel FunctionsがWebアプリケーション内でサーバーレスを使用することを容易にするように設計されていることを意味します。したがって、プロジェクトがそのカテゴリに適合する場合、非常に役立ちます。このプラットフォームは、機能を追加し、パフォーマンスを向上させるためにこの機能を実装するのに役立ちます。
特徴
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 の成熟度を評価することは、サーバーレス Functions と Edge Functions の間に分割されているため、やや複雑です。
Vercel のサーバーレス Functions は、Netlify がその機能をラップする方法と同様に、AWS Lambda 上で実行されます。これらのケースでは、Lambda の安定性は Vercel 自身の信頼性にとって資産となります。
Vercel の Edge Functions は、Amazon Lambda のインフラストラクチャを使用しているようには見えない、より新しい製品です。代わりに、Cloudflare Workers と同様に、V8 ランタイム上で直接実行されます。Edge Functions はまだベータ版であるため、サーバーレス Functions よりも安定性が低く、変更される可能性が高いと考えるべきでしょう。
価格
しかし、これまでのすべてのプロバイダーとは異なり、Vercel のサーバーレス製品は、通常の製品に完全にバンドルされています。サーバーレス製品に対する個別の価格設定はありません。
とはいえ、Vercel の料金プランには以下が含まれます。
- Hobby: 非商用サイトは無料
- Pro: メンバーあたり月額 20 ドル
- Enterprise: クライアントごとにカスタマイズされたプラン
制限事項
Vercel の上限と制限は、サーバーレス Functions に関しては AWS Lambda からある程度引き継がれています。制限事項には以下が含まれます。
- サーバーレス Function の実行時間: Hobby は 100 GB 時間、Pro は 1,000 GB 時間、Enterprise はカスタム実行レベル
- サーバーレス Function の実行タイムアウト: Hobby は 5 秒、Pro は 15 秒、Enterprise は 30 秒
- サーバーレス Function の呼び出し回数: 無制限
- Edge Function の 1 日あたりの呼び出し回数: Hobby は 10 万回、Pro は 50 万回、Enterprise は 500 万回
- サーバーレス Function のデプロイサイズ: 圧縮時 50 MB、非圧縮時 250 MB
- サーバーレス Function のメモリ: Hobby は 1024 MB、Pro は 3008 MB
- サーバーレス Function のリクエストまたはレスポンスボディ: 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 は、MySQL 互換のサーバーレスデータベースプラットフォームであり、Kubernetes 環境でのスケーリング用に構築されたリレーショナルデータベース実装である Vitess 上に構築されています。PlanetScale は、バージョン管理されたデータブランチング、ノンブロッキングスキーマ変更、およびその他の高度な機能を、デプロイが簡単なツールで提供できます。
Prisma と Planetscale がどのように連携するかについて詳しくはこちらをご覧ください。
MongoDB Atlas Serverless
MongoDB Atlas は、ホスト型のマルチクラウドバージョンの MongoDB です。現在、MongoDB Atlas Serverless を、サーバーレスモデルに従って MongoDB データベースと対話する方法として提供しています。ホスト型データベースのサーバーレスバージョンは、使用したリソースに対してのみ課金しながら、変動が大きく、頻度の低いワークロードに対応するためにシームレスなスケーリングエクスペリエンスを提供します。
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 Azure Functions は、テクノロジーが Microsoft 中心である場合は理にかなっていますが、機能の点で 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 はすべてを 1 か所で管理するための良い選択肢です。 |
Vercel Functions | ウェブアプリケーション関数 | Node.js、Go、Python、Ruby、Bash、Deno、PHP、Rust | ウェブアプリケーション、JAM スタックサイト、ヘッドレス CMS。 | Vercel は、ウェブアプリケーションのデプロイストーリーを強化するためにサーバーレスが必要な場合に最適な選択肢です。アプリケーションが Next.js で構築されている場合は、統合が優れていることが保証されているため、これは二重に当てはまります。 |
Prisma Data Platformをチェックして、すべてのアプリケーションデータを一元管理しましょう。