Google社は、インフラストラクチャ、アプリケーション開発、データの管理と分析、AI、生産性など、多岐にわたる分野で122以上のさまざまな発表を行いました。
そのうち、サーバーレスプラットフォームを利用する開発者が特に注目しているのが、Google Cloud Runの提供開始です。Google App Engine、Cloud Functionsに加えCloud Runが登場したことで、Google Cloudを利用したサーバーレスなデプロイメントを検討している開発者にとっての選択肢が増えました。この記事では、サーバーレスアプリケーションの構築が適したケースについて考察するとともに、Googleの各サーバーレスサービスを比較して、サービスを選ぶ際のポイントを解説します。
サーバーレスプラットフォームの一番のメリットは、インフラストラクチャの管理や自動拡張、料金の払い過ぎについて心配することなく、コードの記述に集中できることです。
#googlenext19の開発者向け基調講演の会場にて。「楽しいことに集中できる」という点が強調された素晴らしい講演。楽しむことができれば、価値のあるプログラムは自ずと開発できるのだから。
— nicole forsgren コンピューター科学博士(@nicolefv) 2019年4月10日
ビルドやテスト、デプロイをすばやく簡単に行えるツールやオートメーションを利用できれば、開発者は新しい創造的な仕事に集中できるようになる。
このため、サーバーレスコンピューティングは、以下のようなユースケースに最も適しています。
Cloud Run、Cloud Functions、App Engineは、いずれもGoogle Cloudが提供しているサーバーレスプラットフォームですが、微妙な違いがあり、どれを選ぶべきかは状況によって異なってきます。
Knativeを元に構築されたCloud Runは、Googleの最新のサーバーレスサービスです。他のサーバーレスプラットフォームがイベントドリブンの関数をデプロイメントの主な単位としているのに対し、Cloud Runではコードをステートレスなコンテナにパッケージ化して、HTTPリクエスト経由で呼び出すことができます。
Googleのフルマネージドの環境にCloud Runコンテナをデプロイすると、サーバーレスの一般的なメリット(インフラストラクチャの管理が不要、従量課金、容易に自動拡張できる)を得られるだけでなく、さまざまなプログラミング言語、ライブラリ、システムバイナリがサポートされます。また、Cloud RunではコンテナをGoogle Kubernetes Engine (GKE)にデプロイすることもでき、この場合はサーバーレスコンテナのハードウェア要件を細かく設定できます。
このようにCloud Runは柔軟性に優れているため、Google Cloudでコンテナのパッケージ化と実行に使用しているツールを使ってサーバーレスワークロードを容易に実行したり、ステートフルなワークロードとステートレスなワークロードを一緒にデプロイしたりすることができます。
Cloud Runがコンテナに対応し、HTTPリクエスト経由でコンテナを呼び出すことができるのに対し、Googleが従来から提供しているイベントドリブンサーバーレスプラットフォームに位置付けられるのがCloud Functionsです。Cloud Functionsでは、コードはDockerコンテナにパッケージ化せず、関数としてデプロイします。GoogleはCloud Functionsの記述をサポートしているため、HTTPリクエスト経由でも呼び出せるほか、バックグラウンドイベントに基づいてトリガーされるよう設定することもできます。
def hello_get(request): """HTTP Cloud Function. Args: request (flask.Request): The request object. Returns: The response text, or any set of values that can be turned into a Response object using `make_response` . """ return 'Hello World!'
HTTP Cloud Functionとして記述されたHello World
Cloud Functionsは、コードのデプロイ方法に制約が多く(コードを関数としてパッケージ化しなければならない点など)、特定の言語しかサポートしませんが(JavaScript/Node.js、Python 3、またはGoランタイムを使用して記述可能)、クラウド環境のイベントを使用して関数をトリガーできるメリットがあります。
App Engineは、WebおよびAPIバックエンド向けにGoogleが提供するフルマネージドのサーバーレスアプリケーションプラットフォームです。サーバーレス関数を使用すれば、軽量なスタンドアロンの機能を簡単に実行できますが、Cloud Functionsを使用してより複雑なアプリケーションを実行するのは難しいことがあります。いくつもの機能を持つサーバーレスアプリケーションを構築する場合や、個々のリクエストをまたいで一定レベルのコンテキストを保持する必要がある場合は、Google App Engineが強力な選択肢となります。
Google App Engineでは、コードをGoogleにデプロイして、使用したリソースに対して料金を支払います。コードは、1つ以上のサービスで構成される単一のリソースとして、App Engine上で実行されます。サービスごとに1つ以上のバージョンをデプロイします。各バージョンは、処理するトラフィックの量に応じて、1つ以上のインスタンス内で実行されます。
上記は、アプリケーションのディレクトリから単一のコマンドでGoogle App EngineにHello Worldをデプロイしているところです
特定のニーズに応じて、2種類あるApp Engine環境のいずれかでコードを実行できます。迅速に拡張する必要があるアプリケーションを実行する場合はスタンダード環境を選び、App Engineでサポートされている言語バージョンでアプリケーションを記述することをGoogleは推奨しています。トラフィックが比較的一定しているアプリケーション、カスタムランタイムやサポートされていないプログラミング言語を使用するDockerコンテナで実行されるアプリケーション、Compute Engineで実行されるGoogle Platformプロジェクトの一部にアクセスするアプリケーションの場合は、App Engineフレキシブル環境が推奨されます。
一般に、サーバーレスプラットフォームは、インフラストラクチャの管理が不要なステートレスアプリケーションの構築に最もよく使用されます。たとえば、以下のような場合です。
どのサーバーレスプラットフォームが最適かを判断する際には、次の点を考慮してください。
Google側でも、こちらのページに役立つフローチャートと、各サーバーレスプラットフォームのユースケースの例を掲載しています。
Googleがこのほど行ったサーバーレスコンピューティング関連の発表は非常に素晴らしい内容でした。また、ソフトウェアのイノベーションを加速させるサーバーレスへの期待も大きく膨らみました。Google Cloudのサーバーレスワークロードの監視については、Knative、Cloud Run、Google Cloud Functionsをリアルタイムで可視化するSplunk Infrastructure Monitoringのページをご覧ください。
Splunk Infrastructure Monitoringを利用されていない場合は、14日間のトライアルやオブザーバビリティのデモから始めることができます。
お読みいただきありがとうございました。
Aaron Sun
このブログはこちらの英語ブログの翻訳、宇田川 聡 によるレビューです。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。