フォーム読み込み中
2022年6月28日掲載
サーバレスは、クラウドサービスの恩恵を生かした技術の一つで、サーバを準備や管理することなく、コードでアプリケーションを構築したり実行することができるクラウドアプリケーションです。
今回、Alibaba Cloud、 Amazon Web Services、Micosoft Azure、Google Cloudの主要クラウドサービスのサーバレスサービスを比較をしてみます。
※クラウドサービスの並び順はアルファベット順となります。
サーバレスはAlibaba Cloud、Amazon Web Service、Microsoft Azure、Google Cloud等クラウドプロパイダーがクラウドインフラストラクチャの起動と保守、アプリの実行およびスケーリング処理を支えつつ、開発者はコードを配置するだけで、さまざまなトリガーで呼び出しされたときにオンデマンドでコードを自動実行してくれるプラットフォームです。サーバレスはクラウドサービス上のステートレスコンテナで実行され、HTTPリクエスト、オブジェクトストレージのイベント、モニタリングアラーム、ファイルアップロード、スケジュールイベントなどさまざまなイベントをトリガーにすることができます。コードはアプリケーションを構成するプログラムで、メソッドなど関数の形式で処理します。そのため、サーバレスはFunctions as a Service、FaaSと呼ばれます。サーバレスの料金は、コードの実行に実際かかった時間分だけ課金されます。そのため、1日数十回だけのコード処理であれば、IaaS仮想コンピューティングやサーバ、PaaSサービスを構築するより、サーバレスの方がずっと経済的に安価で済みます。
ユーザ利用者責任モデルの観点から、仮想マシンやコンテナ、フルマネージド型サービスとの違いをみていきましょう。
仮想マシンはIaaSとして、クラウドプロバイダーが物理サーバや仮想マシン、OSインストールをしてくれるので、後は利用ユーザが開発言語の導入やランタイム設定、アプリケーション設定、ソースコード開発をする必要があります。
コンテナはCaaS(Container as a Service)として、dockerなどによりコンテナを通じてOS、開発環境の導入やランタイム設定などをしてくれます。
フルマネージド型サービスはPaaSとして、クラウドプロバイダーが物理サーバや仮想マシン、OSインストール、データベースやアプリケーションなどの設定をしてくれます。
そしてサーバレスはFaaSとして、クラウドプロバイダーがユーザからのコードを実行するための環境を事前に用意することで、ユーザはメソッドや関数などのコードを入力するだけでステートレスコンテナ上でコードを実行してくれます。ステートレスコンテナは、コンテナ上でコードなど一連の処理が終わったらサービス内容を維持せずに即刻終了する意味を指します。そのため、サーバレスでデータや状態情報を保存する場合は外部のデータストアやデータベース、ストレージなどに保存する必要があります。
サーバレスは「コードを実行するのみ」、なので、さまざまな面でのメリット、同時にデメリットがあります。
サーバレスを利用するメリット
サーバレスを利用するデメリット
サーバレスはIaaSとは異なりサーバ自体を持たないため、マイクロサービス指向のシステム設計や概念を支えてくれることもメリットの一つです。一方、他サービスへ連携するためにはフルアクセス権限を許可しなければならない面から、コードの処理が悪いことにより必要以上に不適切な処理等が発生してしまうことや、サーバレスからサービス間にて認証等セキュリティ対策やRDS同時接続などトラフィック対策が必要といったデメリットもあります。これらはサーバレスプロダクトサービスを上手く扱うことでカバーすることは可能です。
サーバレスはさまざまな分野に亘っています。例えば、純粋に関数コードのみを実行するFaaS(Function as a Service)、サーバレスによるアプリケーション、サーバレスKubernetes、サーバレスコンテナがあります。Alibaba Cloud、Amazon Web Service、Microsoft Azure、Google Cloudらクラウドプロパイダーが提供するFaaS、サーバレスサービスを表にまとめてみましたので、紹介します。
Alibaba Cloud | AWS | Azure | Google Cloud | |
---|---|---|---|---|
FaaS(Function as a Service) | ||||
サーバレスアプリケーション | - | - | ||
サーバレスKubernetes | ||||
サーバレスコンテナ | - | |||
フルマネージドコンテナ |
一部コンテナ系プロダクトサービスが混じっていますが、これは元々サーバレスはコンテナベースによるデプロイを行っているので、サーバレスの基盤がコンテナベースと考えてもいいかもしれません。どちらも仮想コンピューティングより効率的にコードを実行することが出来ますが、サポートされているホスト環境や可用性の面などでの違いがあります。ここではサーバレスの記事にフォーカスするため、コンテナの記事はこちらを参考にしてみてください。
ここで紹介したサーバレスプロダクトサービスですが、実は他にもサーバレスプロダクトサービスがいくつかあります。例えば、AWS Aurora serverless、Azure SQL Database サーバレス、Alibaba Cloud MaxCompute、Google Cloud BigQuery、などです。クラウドによる恩恵として、ユーザはコードやイベントを実行するだけで結果を出してくれるサービスが続々登場していますので、ご自身で調べてみるのもいいでしょう。本記事では純粋なサーバレス系プロダクトサービスを中心に紹介します。
サーバレスでは、さまざまなことが実現できます。ここでは代表的なシナリオを紹介します。サーバレスによるWebサイト構築、サーバレスによるメッセージ通知アプリケーション、サーバレスによる機械学習・AI推論、サーバレスによる画像ビデオ配信などが行えます。もちろん、ここには載っていない他のさまざまなシナリオを満たすこともできます。
各クラウドサービスごとのサーバレスコンピューティングサービスの機能比較をしてみます。
※Azure Functionsは2022/06/11時点で最新バージョン(4.x)を選定します。
| Alibaba Cloud Function Compute | AWS Lambda | Azure Functions | Google Cloud Functions |
対応言語
| Node.js 8、Node.js 10、Node.js 12、Node.js 14 | Node.js 12、Node.js 14、Node.js 16 | Node.js 12、Node.js 14 | Node.js 10、Node.js 12、Node.js 14、Node.js 16 |
Python 3.9、Python 3.6 | Python 3.9、Python 3.8、Python 3.7、Python 3.6 | Python 3.9、Python 3.8、Python 3.7 | Python 3.9、Python 3.8、Python 3.7 | |
Java11、Java8 | Java11、Java8 | Java11、Java8 | Java11 | |
NET 6.0、.NET Core 3.1 | .NET 6、.NET Core 3.1 | NET 6.0、.NET Core 3.1 | .NET Core 3.1 | |
Go 1.x | Go 1.x |
| Go 1.16、Go 1.13、Go 1.11 | |
|
| PowerShell 7.0 |
| |
PHP 7.2 |
|
| PHP 8.1、PHP 7.4 | |
| Ruby 2.7 |
| Ruby 3.0、Ruby 2.7、Ruby 2.6 | |
カスタムランタイム | 〇 | 〇 | 〇 | Cloud Run利用 |
きめ細やかなアクセス権 | RAMベース | IAMポリシーベース、サービスユーザ・管理者ベース | RBACはSubScriptionおよびResourceGroupでカバー | IAMポリシーベース |
HTTP(S)トリガー | 〇 | 〇 | 〇 | 〇 |
タイマートリガー | 〇 | 〇 | 〇 | 〇 |
イベントトリガー | OSS、LogService、CDN、TableStore、MNS、AP Gateway、MQ for Apache Kafka | Amazon API Gateway、S3/S3 Batch、Amazon MSK、Apache Kafka、Amazon MQ for Apache Active MQ、RabbitMQ、Amazon SQS、Amazon Kinesis、DynamoDB、AWS IoT&AWS IoT Events、Amazon API Gateway、Amazon CloudFront、Amazon Connect、Amazon Cognito、AWS Config、AWS CodePipeline/AWS CodeCommit、ALB、AWS CloudFormation、Amazon Alexa、Amazon Lex | Blob storage、Queue storage、Kafka、RabbitMQ、Event Grid、Event Hubs、Azure Cosmos DB、Service Bus、IoT Hub、Dapr、SignalR | Cloud Endpoint HTTP、Cloud Pub/Sub、Cloud Firestore、Cloud Storage、Firebase向けGoogleアナリティクス、Firebase Realtime Database、Firebase Authentication、Firebase Remote Config、Cloud Logging、Cloud Scheduler |
WebSocketトリガー | 〇 | |||
Webhookトリガー |
|
| 〇 |
|
Logging & Monitoring | CloudMonitor、Tracing Analysis、Application Real-Time Monitoring Service | CloudWatch、X-Ray | Azure Storage、Application Insights | Cloud Trace、Stackdriver Logging |
同時実行数 | 1インスタンスあたり100 | 無制限 | 無制限 | 100 |
最大メモリ | 32GB | 3,008MB | 1,536 MB | 2,048MB |
最大タイムアウト | 1440分(86400秒) | 15分(900秒) | 10分(600秒) | 9分(540秒) |
OS | Linux | Amazon Linux | Windows、Linux | Linux |
オートスケーリング | 〇 | 〇 | 従量課金プランのみサポート | 〇 |
オーケストレーション | Serverless Workflow | AWS Step Functions | Azure Logic Apps、Durable functions | Workflow |
SLA | 99.95% | 99.95% | 99.95% | 99.95% |
Alibaba Cloud FunctionComputeだけ、最大タイムアウトが1440分です。1440分は24時間、丸一日です。これはコンソール上で確認したところ、確かに86400秒(=1440分)となっています。他のクラウドサービスは10-15分でタイムアウトするのに、Alibaba Cloud FunctionComputeだけ1日でタイムアウトするのは面白いですね。サーバレスプロダクトサービスとして最大メモリが32GBは大きいし、この場合セッションやデータを1日限定で保持した要件のさまざまなアプリケーションが構築できそうです。
AWS Lambdaはイベントトリガーとして数多くのさまざまなAWSプロダクトサービスと連携していることに強みがある印象がします。AWS LambdaはVPCをサポートしていることや、幅広いAPI、ステートレスなので汎用的なアプリケーション構築が出来やすいです。加えて、サーバレスプロダクトサービス4社のうち、Google Cloudと同様Rubyを言語としてサポートしています。Rubyは日本発のプログラミング言語であり、日本国内ではRubyユーザがかなり多くいるため、Rubyを言語としてサポートしているのは非常に大きいと思います。Alibaba Cloud FunctionComputeやAzure FunctionsでRubyを使う場合、カスタムランタイムを使う必要があります。カスタムランタイムはここには表示されていない(サポートされていない)言語でも、サーバレスプロダクトサービスとして実行可能にする機能です。
Azure FunctionsはMicrosoftのクラウドサービスということもあるのか、Microsoft発の言語としてC#、F#、PowerShellなどをサポートしています。クラウドサービスのサーバレスプロダクトサービスで唯一Windowsベースで開発ができることや、言語の性質上Windowsサービスとの相性がよいこと、GUIアプリケーションの開発がしやすいなどさまざまなメリットが活かせそうです。同時にC#とかであれば通常IaaSやローカルで開発する場合、事前にさまざまなpackageを入れる必要があるため、低スペックでは負荷が大きい問題がありますが、サーバレスプロダクトサービスであればこの問題から解放できるのは素晴らしいです。
Google Cloud Functionsは標準なサーバレスプロダクトサービスとして他社との差はあまりなさそうです。しかし、Google Cloudにはさまざまなサーバレスアプローチがあり、Cloud Functionsの他にCloud Runという、カスタムランタイムでコンテナ単位で管理・デプロイできるサービスや、アプリケーション単位で実行するGoogle App Engineがあります。Cloud RunはCloud Functionサポート有無問わずに、任意の言語や言語バージョンを指定しながら、コンテナベースで処理することが出来ます。注意として、Cloud Functionsは呼び出しの都度にコードを実行しますが、Cloud Runは呼び出しの都度インスタンスベースでコンテナを起動しながら複数のリクエストを受けつつさまざまなコードを実行するので、それぞれのアプリケーション構築アプローチや料金の考え方が異なります。AWSにも App RunnerというCloud Run対抗サービスがありますが、こちらは2022/06/11 現時点でサポートしている言語がPython、Node.jsのみであることやトリガー方式、他サービス連携方法がまだ少なく、アプリケーション構築に欠かせないVPCリソースアクセスがまだ出来てないです。著者としてはシナリオ次第ですが現時点ではApp Runnerの今後に期待しつつ、Lambdaによるカスタムランタイム組み合わせを使った方が無難かなと思います。Cloud RunやApp Runnerも非常に便利ですので、いずれの機会にて紹介したいと思います。
代表的なサーバレスサービスでクラウドサービスごとの料金を比較してみます。
スマートフォンからLINEアプリ連携など小規模シナリオを想定して、1ヵ月に500万回呼び出し、200GB-秒、200GBのデータ転送(アウトバインドトラフィック)といった構成で料金をシミュレーションします。
※1USD = 130円での計算になります。
※500万回呼び出しでありながら200GB-秒使用、200GBのデータ転送量は数値的に多いですが、料金計算ロジックをわかりやすくするためにサンプルとして記載します。
サーバレスプロダクトサービスはクラウドサービスごとに無料料金枠があるため、無料料金枠を考慮して計算する必要があります。例えば、AWS Lambdaで、月500万回呼び出し、200GB-秒のインスタンス使用量、200GBのデータ転送量で計算を行った場合、
500万回呼び出しのうち、100万回は無料なので、
500万回 ー 100万回 = 400万回×百万回あたり26.00円で、呼び出し料金は104円/月
インスタンス使用量で400,000GB-秒は無料なので、
2,000,000GB-秒 ー 400,000GB-秒無料 = 1,600,000回×百万回あたり0.00216667円で、インスタンス使用量の料金は3,466.67円/月
データを外部へ流すデータ転送量として月100GBは無料なので、
200GB ー 100GB無料 = 100GB×GBあたり14.82円で、データ転送料金は1,482円/月
総じて、AWS Lambdaの利用料金は合計で5,052.67円/月です。
もし、サーバレスプロダクトサービスからユーザ端末へ通知等外部へデータを流さない構成であれば、データ転送量がないためデータ転送料金は無料です。
このような計算をベースに、Alibaba Cloud、Amazon Web Service、Microsoft Azure、Google Cloudそれぞれのサーバレスプロダクトサービス料金を比較してみます。その結果、上記の表通り、Azure Functionsが一番安く、二番目にAWS Lambda、三番目にAlibaba Cloud FunctionCompute、そしてGoogle Cloud Functionsが一番高くなりました。呼び出し費用はAlibaba Cloud FunctionCompute、AWS Lambda、Azure Functionsどれも同じく百万回あたり$0.2USDですが、クラウドサービス内部のデータをクラウドサービス外、例えばユーザ端末などへ出力する際に発生するデータ転送料金(アウトバインド)で差がつきます。
今度は1ヵ月に500万回呼び出し、100GB-秒、データ転送をしない構成で料金をシミュレーションします。
※1USD = 130円での計算になります。
結果、Azure Functionsが一番安く、二番目にAlibaba Cloud FunctionCompute、三番目にAWS Lambda、そしてGoogle Cloud Functionsが一番高くなります。
料金表からみて、Alibaba Cloud FunctionCompute、AWS Lambda、Azure Functionsの無料枠として呼び出しが200万回までであれば無料、Google Cloud Functionsは呼び出し400万回までであれば無料というポイントが結構左右しそうです。例えば1ヵ月に200万回まで呼び出し、50GB-秒、データ転送しないといった非常にスモールな構成であれば、Google Cloud Functionsの呼び出し費用は無料となり、インスタンス使用料金だけ課金なので、Google Cloud Functionsが一番安くなります。
サーバレスアプリケーションを開発する際、無料枠の内容、月単位での呼び出し回数の頻度、データをクラウドサービスより外部に出すデータ転送量、といった条件次第では、どのクラウドサービスが安いかが変わってきます。個人的には、Alibaba Cloud、 Amazon Web Services、Micosoft Azure、Google Cloudどれもあまり大差なく、逆にサーバレスプロダクトサービスの機能や性能、利便性が開発要件にフィットするか次第という気がします。データ転送料金が高い問題は、データ転送料金が安い他プロダクトサービスでカバーすることは可能です。例えば、AWS Lambdaから外部へ直接データ転送であれば1GBあたり$0.114USD/GBと料金がかかりますが、S3から外部へデータ転送なら1GBあたり$0.09USD/GBと安いので、Lambdaで処理しつつS3から外部へデータ転送するように施すなど、工夫が必要です。
サーバレスはスモールスタートがしやすいように、Alibaba Cloud、Amazon Web Service、Microsoft Azure、Google Cloud等クラウドプロパイダーそれぞれ無料枠を設けています。
| Alibaba Cloud FunctionCompute | AWS Lambda | Azure Functions | Google Cloud Functions |
---|---|---|---|---|
呼び出し回数(毎月最初) | 100万件 | 100万件 | 100万件 | 200万件 |
総実行回数(毎月最初) | 400,000GB-秒 | 400,000GB-秒 | 400,000GB-秒 | 400,000GB-秒 |
アウトバウンドトラフィック | なし | 100GB | 100GB | 5GB |
クラウドサービスの登場からサーバレスの概念やさまざまなサーバレスサービスが登場しています。これにより、開発者は素早いアプリケーション開発をはじめソフトウェア品質向上に集中することができます。また、サーバレスはワークロードに応じて自動スケーリングすることや、障害に強い高可用性構成なので、運用保守における労力から解放することができます。そのため、サーバレス技術は現在多くの企業にて導入されています。各クラウドサービスごとにサーバレスを提供していますが、中身や柔軟さに若干違いがあるので、さまざまなシナリオに応じた適材適所な選定が必要になります。
余談ですが、Alibaba、AWS、Azure、Google CloudどれもVisualStdioCode拡張機能があり、そこでサーバレスプロダクトサービスを使ったアプリケーションを素早く構築することが出来ます。サーバレスによるアプリケーション構築をする際、こちらも参考にしてみるといいでしょう。
ソフトバンクはAWS アドバンストティアサービスパートナーです
「はじめてのAWS導入」から大規模なサービス基盤や基幹システムの構築まで、お客さまのご要望にあわせて最適なAWS環境の導入を支援します。
Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。
Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。
Alibaba Cloudは中国国内でのクラウド利用はもちろん、日本-中国間のネットワークの不安定さの解消、中国サイバーセキュリティ法への対策など、中国進出に際する課題を解消できるパブリッククラウドサービスです。
条件に該当するページがございません