サーバレスとサーバレスコンテナ、サーバレスKubernetesを活用する理由ってなに?Alibaba, AWS, Azure, Google Cloudで比較してみました【前編】

2022年9月13日掲載

キービジュアル

サーバレスは、クラウドサービスの恩恵を生かした技術の一つで、サーバを準備や管理することなく、コードでアプリケーションを構築したり実行することができる技術です。

サーバレスコンテナは、コンテナを特定のインフラストラクチャから切り離し、インフラストラクチャをできるだけ運用保守せずにユーザーワークロードに応じてコンテナを自動スケーリングしながらデプロイできるようにする技術です。

サーバレスKubernetesは、コンテナオーケストレーションであるKubernetesのリソースを抽象化しつつ、ノードを管理せずにアプリケーション開発に集中したり、ユーザーワークロードに応じてクラスターリソースの自動スケーリングしたり運用中のサービスに影響を与えずにダウンタイム無しでデプロイなどをすることができる技術です。

今回、このサーバレスとサーバレスコンテナ、サーバレスKubernetesを活用する理由、およびAlibaba Cloud、 AWS、 Azure、 Google Cloudでサーバレスとサーバレスコンテナ、サーバレスKubernetes機能が付帯しているサービスだと、どんな展望があるかを紹介してみます。

※本記事は前章になります。
※クラウドサービスの並び順はアルファベット順となります。
※本記事は 2022年7月時点の情報をもとにしております。実際のご利用にあたっては、必ず各社の最新情報をご確認ください。

目次

サーバレスとは

サーバレスはAlibaba Cloud、Amazon Web Service、Microsoft Azure、Google Cloud等クラウドプロパイダーがクラウドインフラストラクチャの起動と保守、アプリの実行およびスケーリング処理を支えつつ、開発者はコードを配置するだけで、さまざまなトリガーで呼び出しされたときにオンデマンドでコードを自動実行してくれるプラットフォームです。

詳しくはこちらの記事にて記載していますので、よかったら参考にしてみてください。

サーバレスってなに?Alibaba Cloud, AWS, Azure, Google Cloud のサーバレスサービスを比べてみました。

サーバレスコンテナとは

コンテナはアプリケーションを実行するためのコードとその依存関係を全てパッケージ化した、軽量のソフトウェアパッケージです。コンテナはOSや仮想マシンを必要とせず、コンテナを作成したらすぐにアプリケーションを導入して仮想サーバーおよびアプリケーションを構築することができます。

例えば、開発環境と本番環境それぞれがあるとして、その環境が異なっている場合、環境毎にライブラリや環境変数、ミドルウェアなどのバージョン、構成を揃えないといけないです。もし開発環境でPython3.91が使われてるなら、本番環境はPython3.91へ合わせるといった対策が必要です。そうしないと、アプリケーションの動作品質が保証できなくなります。

そういった環境差分による問題を解決するのがコンテナです。コンテナによるデプロイを行った場合、環境毎にライブラリや環境変数、ミドルウェアなどのバージョンや構成を考慮せずに、開発環境と本番環境それぞれのアプリケーションが同一動作できるようにしてくれます。

同時に、開発環境と本番環境をsyncするために環境毎にライブラリや環境変数、ミドルウェアなどのバージョンや構成設定といった作業も、コンテナが実行してくれるため、アプリケーションを素早く提供できるメリットもあります。

参考リンク:What is a Container? - Docker

詳しくはこちらの記事にて記載していますので、よかったら参考にしてみてください。

コンテナってなに?Alibaba Cloud, AWS, Azure, Google Cloud のコンテナサービスを比べてみました

サーバレスプロダクトサービスは開発者はコード開発のみに集中できるため、非常に便利です。一方、サーバレスプロダクトサービスは開発言語や環境変数など実行環境が限定されていることや、テスト等デバッグが困難、依存関係、Cold Start、メモリ消費量や実行時間の制限など、クラウドプロパイダーロックインによりアプリケーションの動作品質を保証するためのコントロールが難しくなる面もあります。

コンテナというアプローチだと、アプリケーションの動作品質を保証しながらデプロイすることができます。ライブラリや環境変数、ミドルウェアなどのバージョン、構成を自由自在に設定することができるという柔軟性が増す一方で、インフラストラクチャの準備や環境構築、追加設定、スケーリング、アプリケーション管理、コンテナイメージ作成やテストなど開発者の扱う手作業範囲が深く、またコンテナをデプロイするだけでは運用に負荷が発生しやすいリスクもあります。

両方のメリット・デメリットを抑えつつ、クラウド上のアプローチとしてそれぞれを解決することができるのが、サーバレスによるコンテナというアプローチです。サーバレスコンテナだと、変動の激しいユーザーワークロードでもサービスを素早くデプロイすることができることや、運用保守の負荷を減らせられるといった様々なメリットがあります。つまり開発者はアプリケーション開発に集中するだけで良い、ということになります。

サーバレスコンテナは比較的新しい技術で、クラウドサービスだとインスタンス管理不要のコンテナ実行サービスが該当します。例えばAlibaba CloudならElastic Container Instance、AWSなら ECS + Fargate、AzureならService Fabric + Container Instances、Google Cloud Runなどです。

サーバレスコンテナをクラウドサービスとして販売展開する会社であれば、SpotのOcean、Scaleway、Yandex Cloudのserverless-containersなどが挙げられます。Yandexのserverless-containersは無料枠が大きいのと、自動で瞬時水平垂直スケーリングもあり、運用保守が楽なので筆者は時々利用しています。

参考リンク

Spot Ocean
Scaleway
Yandex

サーバレスコンテナについてもう少し説明します。AWSの場合、AWS ECSとAWS Fargateを組み合わせることで、サーバレスコンテナを実現することができます。

AWS ECSはオーケストレーション不要のコンテナを管理するサービス、AWS FargateはECSらコンテナを実行する環境のサービスです。ECSコンテナ実行環境として、FargateのほかEC2インスタンスを選定することもできますが、その場合、EC2インスタンスのクラスター管理、スペックや環境をカスタマイズできる一方で、EC2インスタンスの運用監視が必要というデメリットもあります。

そのため、AWS Fargateをサーバレス土台としつつ、サーバレスコンテナとしてのデプロイが可能になります。このように、サーバレスコンテナアプローチはアプリケーション実行環境を自分で定義することができます。

他のクラウドサービス、Google Cloud RunやAzure Container Instance、Alibaba Cloud Elastic Container InstanceもAWS ECS+AWS Fargate組み合わせによる展開と似たアプローチで、アプリケーション実行環境を自分で定義しつつ、アプリケーション設計開発のみに集中するということができます。

サーバレスKubernetesとは

一方、サーバレスコンテナを問わずコンテナを多用するアプリケーションの場合、コンテナデプロイ後のデータの動き、ネットワークの扱い、ステートレスなストレージ、セキュリティ要件など管理が複雑になる課題があります。

例えば、コンテナを外部ネットワークや他のコンピューティングノードと疎通するためにNATを配置、経由する必要があります。他にサービスに対してダウンタイム無しのデプロイ、死活監視、障害対応、などなどでコンテナを1-2個だけ使うサービスであれば作業規模は小さいですが、コンテナが増えれば増えるほど、作業規模が大きく、運用がツラくなるという課題があります。

それを解決するのがKubernetes(k8s)というコンテナオーケストレーションツールです。コンテナオーケストレーションツールは複数ホストでコンテナイメージを展開したり、ロードバランサを配備したり、オートスケールするといった作業を自動化することができます。サービス全体からみるVM、コンテナ、Kubernetesそれぞれの構成層をイメージすると次の図通りになります。

Kubernetesは、コンテナで実行されているアプリケーションのデプロイ、スケーリング、可用性を自動化するため、複数のコンテナを管理する手間が減り、運用コストやハードウェアのランニングコストを削減することができます。

しかも、Kubernetesはオープンソースのコンテナオーケストレーションプラットフォームなので、開発者が多くのクラウドおよび様々なサーバー製品で動作するため、すべての異なるシステムに同じオーケストレーションツールとコマンドラインインターフェースを使用することができます。

Kubernetesは1つのClusterに1つのMaster NodeとWorker Nodeで構成されています。開発者はYAML形式による設定ファイルおよびkubectlコマンドを使って、API Server経由でMaster Nodeへ反映するように操作します。これによりMaster NodeはCluster配下の全てのWorker Nodeのkebeletを通じてWorker Nodeの稼働状況を把握しつつ、YAML設定ファイルおよびkubectlコマンドの結果に合わせてコンテナ配置や変更、削除などを指示します。

kebeletはMaster NodeとWorker Node間で通信するための機能です。Worker NodeはMaster Nodeからのコマンドを受理したら、コンテナ管理システムを使ってコンテナ中のアプリケーションを実行します。外部ユーザーはPodの中にあるコンテナの中のアプリケーションと通信するためにkube-proxyを使用してアクセスします。

他にもKubernetesの各機能やケイパビリティ、素晴らしさは多々ありますので、気になる方は是非参考にしてみてください。

・参考リンク
Kubernetes.io
Kubernetesとは何か?
僕らは何故Kubernetesを使うのか

サーバレスKubernetesとしてのプロダクトサービスやオープンソースも色々あります。例えばAlibaba CloudならContainer Service for Kubernetes(Serverless Kubernetes:ASK)、Azure Kubernetes Service(Virtual Kubelet)、Google Cloud Run(Knative)、などです。注意として、AWSはフルマネージド型KubernetesとしてAmazon Elastic Kubernetes Serviceがありますが、プロダクトサービス単体としてサーバレスKubernetesはまだなく、サーバレス実行環境のAWS FargateとAmazon Elastic Kubernetes Serviceをセットで使います。

・参考リンク
Virtual Kubelet
Knative - Serverless Kubernetes
Kubernetes・Serverlessとの出会いと、Knative入門
OpenFaaS

サーバレスとサーバレスコンテナ、サーバレスKubernetesの比較

上述からサーバレス、サーバレスコンテナ、サーバレスKubernetesそれぞれで開発者目線でメリットデメリットを以下にまとめてみます。

 

メリットデメリット

サーバレス

コード作成のみに集中できる

仕様や機能制限あり

サーバレスコンテナ

ライブラリや環境変数、ミドルウェアなどのバージョン、構成を自由自在に設定できる

環境構築や追加設定、コンテナイメージ作成やテストなど開発者の負荷が発生しやすい

サーバレスKubernetes

Kubernetesのメリットを享受。障害時は自動切換や自動復旧機能が付帯されている。スケールアウトが容易、サービスディスカバリによる死活監視が行える

学習コストが高い。クラウドプロパイダーから展開しているサービスと連携して運用する場合は、そこまで使う必要性がない

Alibaba Cloud、Amazon Web Service、Microsoft Azure、Google Cloudらクラウドプロパイダーが提供するサーバレス、サーバレスコンテナ、サーバレスKubernetesを表にまとめてみましたので紹介します。特に太字が今回説明したものです。

 

Alibaba

AWS

Azure

GCP

サーバレス

Function Compute

AWS Lambda

Azure Functions

Cloud Functions

コンテナレジストリ

Container Registry

Amazon Elastic Container Registry

Azure Container Registry

Container Registry

コンテナ実行環境

Function Compute(Use Container Image)

AWS App Runner

Azure Container Apps

-

コンテナオーケストレーション

-

Amazon Elastic Container Service

Service Fabric

-

インスタンス管理不要のコンテナ実行環境

Elastic Container Instance

AWS Fargate

Azure Container Instances

Cloud Run

サーバレスコンテナ

Elastic Container Instance

AWS Fargate+Amazon Elastic Container Service

Azure Container Instances

Cloud Run

フルマネージド型Kubernetes

Container Service for Kubernetes

Amazon Elastic Kubernetes Service

Azure Kubernetes Service

Google Kubernetes Engine

サーバレスKubernetes

Container Service for Kubernetes(Serverless Kubernetes:ASK)

AWS Fargate+Amazon Elastic Kubernetes Service

Azure Kubernetes Service

Google Kubernetes Engine

サーバレスとサーバレスコンテナ、サーバレスKubernetesどれを選べばよいか?

上記、「基盤は何を選べばいいか?」という考えに対し、目的に応じた適材適所な選択ができるよう、全体像をフローチャート形式でまとめてみました。

ここからはそれぞれのパブリッククラウドサービスの構成図を使いながら説明します。例えば下記の記事で紹介しているWeb三層アプリケーションを構築、運用する場合、ベーシックな構成であれば、EC2やVM等仮想コンピューティング系サービスを中心とした構成にします。

・参考記事
Web3層アーキテクチャってなに?Alibaba Cloud, AWS, Azure, Google Cloud のWeb3層アーキテクチャを比べてみました

仮想コンピューティング系サービスを中心とした構成によるWeb三層アプリケーションで、ユーザーのワークロードが一定していないシナリオだと、使ってない時間帯でも仮想コンピューティング系サービスを常時起動することになるため、結果としてランニングコストが高くなってしまうリスクがあります。この場合、サーバレスプロダクトサービスによるWeb三層アプリケーション構成でコストを節約することができます。

ただし、データ層のリレーショナルデータベースはインスタンス上にデータ層が含まれているため、クラウドのリレーショナルデータベースを起動したら課金が始まり、停止するまで課金を止めることができないので(注:Azure Databaseだけは一時停止による課金を抑えることが可能)、データベースもサーバレスデータベースか、使った分だけ課金するKey-Valueデータベースを選定することでコスト削減をすることができます。

仮想コンピューティング系を中心としたベーシックなWeb三層アプリケーションおよびサーバレス系を中心としたWeb三層アプリケーションだと、例えば開発環境と本番環境それぞれ利用している場合、開発環境と本番環境間にてアプリケーションの基盤となるソースコードのバージョン管理にリスクがつきやすくなります。そのため、イメージファイルを使った環境構成の管理を見据える場合、構成管理が容易であるサーバレスコンテナを中心としたWeb三層アプリケーションを目指します。

サーバレスコンテナも便利ですが、サービスの規模が大きいほど、ホストの複数管理や運用が困難になるので、オーケストレーションとしてサーバレスKubernetesを利用します。逆に、サービスの規模が小さい、もしくはInput以外何も処理しないといったステートレスの場合、サーバレス系を中心としたWeb三層アプリケーションが推奨、といった相関図があります。

こういった風に、サーバーレスとサーバレスコンテナ、サーバレスKubernetesそれぞれの適材適所な考え方が必要になります。

さいごに

クラウドの技術を活かしたサーバレスとサーバレスコンテナ、サーバレスKubernetesによる効果は非常に大きいです。開発者はクラウドの力を借りつつ、アプリケーションを素早く設計、開発、運用することができるだけでなく、運用の自動化、効率化も見込めれます。サーバレスはユーザーなどがリクエストすると、システム内が反応して実行するといったイベント駆動型アーキテクチャなので、仮想コンピューティング系をずっと起動し続けるシナリオよりコストを削減することもできます。

今回はサーバレス、サーバレスコンテナ、サーバレスKubernetesを活用する理由を紹介しましたが、次の記事にて、Alibaba Cloud、 AWS、 Azure、 Google Cloudのサーバレス、サーバレスコンテナ、サーバレスKubernetesでそれぞれどんな展望があるかを構成図付きで紹介します。

関連サービス

Alibaba Cloud

Alibaba Cloudは中国国内でのクラウド利用はもちろん、日本-中国間のネットワークの不安定さの解消、中国サイバーセキュリティ法への対策など、中国進出に際する課題を解消できるパブリッククラウドサービスです。

Amazon Web Services (AWS)

ソフトバンクはAWS アドバンストティアサービスパートナーです

「はじめてのAWS導入」から大規模なサービス基盤や基幹システムの構築まで、お客さまのご要望にあわせて最適なAWS環境の導入を支援します。

Microsoft Azure

Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。

Google Cloud

Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。

おすすめの記事

条件に該当するページがございません