AWS・Azure・Google Cloudの基礎(サーバーレス編)
目次
はじめに
アジアクエスト クラウドインテグレーション部の須藤匠です。
この記事では、各クラウドサービスにおけるサーバーレスについてご紹介します。
この記事を読むことで、サーバーレスのメリット・デメリット、各種○aaSの違い、各クラウドサービスのサーバーレスの特徴を知ることができます。
使用するサービスを検討する際に最適なものを選択する一助となれば幸いです。
サーバーレスとは
サーバーレスとは「サーバーが無い」という意味になりますが、普段使っているwebサイトやプログラムを実行するためにはサーバーが必要なはずです。
しかし、サーバーが無いのであれば何とやりとりしているのでしょうか?
実際にはサーバーレスといってもサーバーが存在しないわけではなく、サーバーの管理・運用を開発側ではなくサービス事業者側が担うということを意味しています。
サーバーレスとは:
- サーバーやOSなどのインフラを意識することなくプログラムを作成・実行できる技術の総称
- オートスケーリング、ビルトインの高可用性、使用量に応じた課金モデルなどに特徴がある
- サーバーの管理・運用をサービス事業者側が担うことで、開発者がサーバーの設定を考える必要が無くなる
サーバーレスのメリット・デメリット
メリット
- サーバー運用が不要
サーバーの構築、バグ対応や脆弱性対策などの運用にかかるコストや手間を省けます。
サーバーレスを導入することで、アプリケーションの開発に注力しやすくなります。
- 従量課金のためコスト削減ができる
サーバーレスは、利用した時間もしくはプログラムの実行回数に応じた課金体系のため、実行しなければ料金は発生しません。
使った分だけ課金されるため、コスト削減を狙うことができます。
例えばEC2などの場合、サーバーの利用契約を1年単位で結ぶと、使用しなくても1年間は料金が発生してしまいます。
- 高いスケーラビリティ(拡張性)
サーバーレスは、実際のデータ量などに応じて自動的にリソースの性能をアップ・ダウンしてくれる「オートスケール機能」でコストを抑えながら、常に最適なリソースで処理を実行できます。
一般的にシステムを構築する場合、処理に必要となるCPUやデータ量などをもとに計算し、あらかじめ必要なリソースを見積もらなければなりません。
性能が不足した場合は処理が滞るリスクもあり、高い利用料を払って高性能なリソースを用意しても結局使用しなかったというケースもあると思います。
- 可用性を意識しなくて良い
サーバーレスのサービスでは、クラウドベンダ側が可用性を考慮した構成を提供しています。
そのために、サービスそのものを利用できなくなるリスクが低く、安定した稼働が可能です。
デメリット
- クラウドインフラの障害に大きく影響される
サーバーレスは、実行対象の機能以外は全てクラウドベンダ側のリソースを活用するため、万が一クラウド側で障害が発生した場合は大きな影響を被ります。
クラウドは信頼性が高いという特長を有しており、いずれのサービスも100%に近い稼働率を誇っています。
ただし、規模の差はあれど各クラウドベンダが提供するクラウドサービスも障害自体は発生しています。
直近では、大きな障害がAWSの2023年6月14日バージニアリージョンで発生しました。
Lambdaが原因で合計104のサービスに障害が発生した事例です。
このAWSの障害により、家電をスマートフォンから操作するIoT系やニューヨーク州都市交通局(MTA)がウェブサイトとアプリで運行状況を利用できない状況になったそうです。
- タイミングによって処理に時間がかかる
リクエストを受けてからサーバーを起動するため、レスポンスタイムが少し遅くなります。
即応性が必要なシステムを構築する場合には、サーバーレスサービスとの相性は良くありません。
サーバーレスに向いているケース
- 新規サービスや単純なプログラム
- 画像処理、ファイルアップロード、テキスト処理、チャットボットなど
サーバー導入コストがかからないので、新規サービスの開発に気軽に挑戦できます。
サーバーレスは処理に使えるメモリや時間に制約がある場合が多いため、データ処理に多くのメモリや時間を必要としないシンプルな作業に適しています。
サーバーレスに向いていないケース
- 長時間稼働する複雑なプログラム、ミリ単位での応答速度が求められるサービス
ネットワーク経由でサーバーに接続するサーバーレスでは、イベント発生から処理が実行されるまで、最大で数秒程度の遅延が発生する可能性があります。
遅延が発生すると問題があるシステムでは通常サーバーの方を検討しましょう。
〇aaSの違い
『〇aaS(〇〇 as a Service)』という言葉を聞いたことがあるかもしれません。ひとことで言えば、これらは「クラウドサービスを利用形態で分類したもの」です。
様々な種類があるのですが、今回は以下3種類を紹介します。
- IaaS(Infrastructure as a Service)
- PaaS(Platform as a Service)
- FaaS(Function as a Service)
IaaS(Infrastructure as a Service)
IaaSの特徴は、自社で機材を購入・構築する必要があった情報システムをインターネット上でサービス・アプリ開発に必要な環境をすぐに利用できることです。 またIaaSでは、利用する環境のスペックやOSをユーザーが自由に選定して構築することができます。
代表的なサービス:AWS EC2、GCP Google Compute Engine、Azure Virtual Machines
PaaS(Platform as a Service)
PaaSの特徴は、アプリの開発環境がプラットフォーム化されているため、サービス開発に集中しやすくなることです。
IaaSよりも自由度やカスタマイズ性は劣りますが、その分インフラの設計や、保守・管理を気にすることなくサービス開発に注力できます。
代表的なサービス:AWS Elastic Beanstalk、GCP Google App Engine、Azure App Service、kintone
余談ですが、弊社アジアクエストのインドネシア海外支部がCYBOZU AWARDにて海外市場におけるサイボウズ製品(kintone)の販売、導入活動で実績を残したパートナーに贈られるグローバル賞を受賞しました。
プレスリリース:アジアクエストがサイボウズアワードにてグローバル賞を受賞
FaaS(Function as a Service)
FaaSは主に「サーバーレスコンピューティング」のことを指します。
ソフトウェアやミドルウェア、プログラミング言語の実行環境が準備されており、開発者はコードをアップロードするだけで即座にプログラムを実行できます。
サーバーのメンテナンス・ソフトウェアアップデートなどもクラウド事業者側が行うため、ユーザーはサーバーの運用や保守に労力をかけず、プログラム開発に集中できます。
代表的なサービス:AWS Lambda、GCP Google Cloud Functions、Azure Functions
各クラウドにおけるサーバーレスコンテナ
現実の貨物のコンテナと同様に、ITの世界の「コンテナ」も中にアプリケーションやWebサイトを乗せたまま自由に場所を移動でき、オンプレミスやクラウドなどの環境を問わずに実行することができます。
代表的なサービス
AWS Fargate
- Dockerコンテナ環境の運用自動化サービス
- コンテナ実行環境のホストマシンなどの管理が不要になる
- インスタンスのOSやDocker Agent、ミドルウェアなどの構築や設定操作の手間が不要
- 実行時に必要なのはCPUやメモリの組み合わせのみ
Azure Container Instances(ACI)
- サーバーレスでコンテナを実行
- 共同スケジュールグループ:ホスト、ネットワーク、ストレージ、ライフサイクルを共有するコンテナグループのスケジュール設定をサポート
- コンテナオーケストレーションや自動スケーリング機能なし
- 直接アクセス可能:Public IPとDNSがコンテナ単位で提供される
Google Cloud Run
- サーバーレスのコンテナ実行環境
- フルマネージド:インフラストラクチャの管理が一切不要、シンプルな開発者エクスペリエンスを実現
- アプリケーションの移行が簡単:Knativeを基盤として構築されていて、アプリケーションの移植が可能
- 高速に自動スケーリングできる:必要に応じてリソース使用量を高速で増減、最小インスタンスを「0」に設定できる
性能・コスト比較
AWS | Azure | Google Cloud | |
---|---|---|---|
サービス名 | AWS Fargate | Azure Container Instances | Google Cloud Run |
CPU料金(VCPU/h) ※2024年10月時点 |
$0.05056 | $0.04660 | $0.0648 ※毎月無料利用枠あり |
メモリ料金(GB/h) ※2024年10月時点 |
$0.00553 | $0.00511 | $0.0072 ※毎月無料利用枠あり |
最大CPU | 16vCPU | 8vCPU | 8vCPU |
最大メモリ | 120GB | 32GB | 32GB |
可用性 | 99.99% ※年間約53分停止 |
99.90% ※年間約525分停止(約8.76時間) |
99.95% ※年間約262分停止(約4.38時間) |
- 値段はGoogle Cloud Runが高め
- 最大CPUはAWS Fargateが高い
各クラウドにおけるイベント駆動コンピューティング(FaaS)
イベント駆動コンピューティングとは?
現実世界では、何かの出来事が起こると、それに対して反応があります。システムでも同じように、出来事や通知を受け取ったら、それに応じた処理を行う仕組みを作ります。
代表的なサービス
AWS Lambda
- AWSが提供するサーバーレスでコード実行可能なコンピューティングサービス
- トラフィック量に応じて自動的にスケーリング
- 複数関数を同時実行できるオプションを提供
- 実行時間、利用メモリ量で料金が発生
Azure Functions
- Azureが提供するサーバーレスでコード実行可能なコンピューティングサービス
- 従量課金プランとPremiumプランを選べる
- HTTPトリガー設定が可能
- Azure App Service(PaaS)上で実行可能
Google Cloud Functions
- Google Cloudが提供するサーバーレスでコード実行可能なコンピューティングサービス
- 第一世代、第二世代を提供している
- Google Cloud FunctionsのみでHTTPトリガー設定が可能
- 使い方によっては3サービスで最も安く利用できる
各クラウドにおけるFaaSの性能コスト比較
AWS | Azure | GoogleCloud | |
---|---|---|---|
サービス名 | AWS Lambda | Azure Functions | Google Cloud Functions |
対応言語 | Java, Go, PowerShell, Node.js, C#, Python, Ruby | C#, Java, JavaScript, TypeScript, PowerShell, Python | Node.js, Python, Go, Java, NET, Ruby, PHP |
OS | Amazon Linux | Linux | Linux |
最大実行時間 | 900秒 | 従量課金プラン:600秒 Premiumプラン:無制限 |
540秒 |
100万リクエストあたりの料金(東京リージョン) | 0.20USD ※2024年10月時点 |
0.20USD ※2024年10月時点 |
0.40USD ※2024年10月時点 |
無料枠 | 毎月40万GB/秒、100リクエスト | 初回40万GB/秒、100万リクエスト | 毎月40万GB/秒、20万GHz/秒、200万リクエスト |
- Azure FunctionsのPremiumプランはリクエストごとではなく、CPU使用時間とメモリ使用時間ごとに料金が発生
まとめ
- サーバーレスとはサーバーやOSなどのインフラを意識することなくプログラムを作成・実行できる技術の総称
- サーバー運用が不要、従量課金、高い拡張性などのメリットがある
- サーバーレスは新規サービスや単純なプログラムの開発に向いている
- 各クラウドでサービスのコストや性能は異なる
- 貨物のコンテナのように、ITでいうコンテナもアプリケーションなどを入れて自由に移動でき、環境を問わずに実行できる
- コンテナもサーバーレスで実行可能
- イベント駆動コンピューティング(FaaS)は、あるイベントを受け取ると処理を起動するというシステムを実装したもの
- サーバーレスにすることでサーバー運用や保守に気を取られず開発に集中できる
アジアクエスト株式会社では一緒に働いていただける方を募集しています。
興味のある方は以下のURLを御覧ください。