皆様、こんにちは!
アイレット株式会社 DX開発事業部の楊林と申します。
前回の投稿では、Google Kubernetes Engineを紹介してきました。Google Compute Engine と Google Kubernetes Engine は、どちらも重要なコンピューティングサービスです。
今回はこの両者以外のコンピューティングサービスについて紹介していきます。
App Engine
App EngineはPaaSとして提供される、サーバーレスのフルマネージドアプリケーションプラットフォームです。アプリケーションの構築とデプロイを大幅に簡略化してくれます。
開発者は基盤インフラを意識する必要がなく、コードを書いてアップロードするだけで、高信頼・高可用性のスケーラブルなアプリケーション実行環境が自動的に整います。
サポートされている言語は Java、Node.js、Python、PHP、C# / .NET、Ruby、Go など幅広く、コンテナ化したワークロードも実行可能です。また Cloud Monitoring、Cloud Logging、Cloud Profiler、Error Reporting など Google Cloud の主要サービスと密接に統合されています。
App Engine には明確な構成階層があります。プロジェクトに1つのアプリケーションで、各アプリケーションに複数サービスで、各サービスに複数バージョンで、各バージョンに複数インスタンスという構造で運用されます。バージョン管理やトラフィック分割も標準でサポートしており、A/Bテストなどのデプロイ戦略にも対応できます。
ユースケースとしては、Webアプリケーション、モバイル・ゲームのバックエンド、RESTful API の提供などが挙げられます。
Cloud Functions
Cloud Functionsは、イベントベースの軽量な非同期コンピューティングサービスです。サーバーやランタイム環境を管理せずに、小規模な単一目的の関数を作成し、クラウドイベントに応じて実行できます。いわゆる Functions as a Service (FaaS) に該当します。
Node.js、Python、Go、Java、.NET Core、Ruby、PHPなど多くの言語をサポートしており、コードをアップロードするだけで必要な実行環境が自動的に用意されます。
Cloud Storage の変更、Pub/Sub メッセージの受信、HTTP 呼び出しなど多様なイベントをトリガーとして非同期実行できます。HTTP を利用すれば同期処理も可能です。
課金は関数が実行されている時間だけで、100ms 単位で請求されます。永久無料枠もあるため、軽量なバックエンドやマイクロサービスでは実質無料で運用できるケースも多いです。
ユースケースとしては、モバイルやIoTアプリのバックエンド、外部APIとの連携、サードパーティサービスとの統合、自動処理のトリガーなどが挙げられます。
Cloud Run
Cloud Runはサーバーレスのフルマネージドコンピューティングプラットフォームで、HTTPリクエストまたはPub/Subイベントをトリガーとして、ステートレスコンテナを実行します。インフラ管理は不要で、アプリケーション開発に集中できます。
KubernetesベースのオープンAPIであるKnative上に構築されており、Cloud Run・GKE・Knative環境間でワークロードを移行しやすい点も特徴です。
Cloud Runはリクエストに合わせてゼロから瞬時にスケールします。ピーク時は自動で増え、リクエストがない時はインスタンスがゼロになり、課金も止まります。
Cloud Runには「コンテナベース」「ソースベース」2つのデプロイ方式があり、後者ではソースコードから Buildpacks により自動的にコンテナイメージが作成されます。
課金はコンテナがリクエスト処理中で消費した CPU・メモリに応じて100ms単位で行われ、リクエストがない間は課金されません。さらに100万リクエストごとに少額の請求が発生します。
Linux 64bit 上で動作するバイナリであればどの言語でも利用可能で、Java・Python・Node.js・Go・C++など一般的な言語だけでなく、Cobol や Haskell、Perl などでも動作します。
コンピューティングサービスの選択
Google Cloud の資格試験では、マネージドインスタンスグループ(MIG)、Google Kubernetes Engine(GKE)、App Engine、Cloud Functions、Cloud Run といったコンピューティングサービスが横並びで提示され、「どれを選ぶべきか」を問われる問題がよく出てきます。
実際の業務でも、これらのサービスは用途が被っている部分もあって、初めて触ると「何がどう違うのか?」と迷いやすいところです。ここでは、それぞれがどんな場面で力を発揮するのかを、もう少し実際的な視点で整理してみます。
まず、既存の VM ベースのアプリケーションをほぼそのまま移行したい、いわゆるリフト&シフトをしたい場合や、OS の設定、ネットワーク構成、ミドルウェアやランタイムなどを細かくコントロールする必要があるときには、マネージドインスタンスグループ(MIG)が最適です。環境をがっつりカスタマイズしたい場面では圧倒的に柔軟です。ただし、スケールトゥゼロはできないため、アイドル時のコストをできるだけ減らしたいケースや、管理負担を避けたいケースでは向きません。
一方で、大規模なマイクロサービス構成や複雑なワークロードを扱う場合は、GKE が強力な選択肢になります。Kubernetes のエコシステムをそのまま使えるため、ネットワークやセキュリティの細かい設定にも対応でき、マルチクラウド戦略を採用する企業では標準基盤として使われることも多いです。ただし、Kubernetes の知識がないと初期学習コストが高くなりがちなので、シンプルな Web アプリをサッとホストしたい場合や管理オーバーヘッドを最小限にしたい場合には、もっと手軽な選択肢があります。
そこでもう少しアプリ寄りの話になると、App Engine が候補に入ってきます。トラフィック変動が激しいサービスのホスティングに向いていて、長時間動き続けるプロセスやバックグラウンドタスクの実行にも使えます。フルマネージドで環境構築を丸ごと任せられるのは大きなメリットですが、アイドル時コストを極力抑えたい場合や、特定 OS やカスタムバイナリが必要なアプリの場合には選択肢から外れてきます。
もう少しライトにイベント駆動で処理したい場合は Cloud Functions がハマります。短いタスクや軽量 API、イベントベースの処理などに向いており、変動トラフィックのマイクロサービスでもよく使われます。ただし、複雑な Web アプリ、常時稼働が必要なシステム、大量の初期化処理が必要なアプリ、そしてレイテンシーに厳しい要件があるケースでは適しません。あくまで「小さなロジックを素早く動かす」用途に最適化されています。
そして、Cloud Run はコンテナの柔軟性をそのまま活かしつつ、サーバーレス的に、しかもスケールトゥゼロで動かせるという、使い勝手の良さが魅力です。トラフィックが読めないサービス、マイクロサービス、API、Web フロントなど幅広い用途に対応でき、既存のコンテナアプリを移行する際にも非常に便利です。ただし、24時間365日高負荷が続く処理や OS レベルの完全なコントロールが必要なケースには向きません。また、Cloud Run は GPU をサポートしていない点にも注意が必要です。
最後に
今回はGoogle Cloudで Google Compute Engine と Google Kubernetes Engine 以外のコンピューティングサービスと、サービス選択の考え方をまとめました。
次回からはGoogle Cloudのネットワークについて紹介していきます。
引き続き読んでいただければ嬉しいです!
以前の投稿
【Google Cloud入門】クラウドサービスの特徴とGoogle Cloudの触り方
【Google Cloud入門】リソースマネージメント
【Google Cloud入門】アクセス管理の基本 - IAM
【Google Cloud入門】サービスアカウントとCloud Identity
【Google Cloud入門】Compute Engineの基礎
【Google Cloud入門】コンピューティングオプションとマネージドインスタンスグループ
【Google Cloud入門】GKE入門の前準備-コンテナの基礎
【Google Cloud入門】GKE入門の前準備-Kubernetesの基礎
【Google Cloud入門】Googleのコンテナ仮想環境ーGoogle Kubernetes Engine