Google Cloud Next 2019 in SF , サーバーレス関連発表まとめ
Google Cloud Next 2019 in San Francisco が 2019 年 4 月 9 ~11 日に開催されました。その中でのサーバーレス関連の発表をまとめました。
Cloud Run & Knative
今回の Next で発表されたサーバーレス関連のトピックでは一番の注目を集めたのではないでしょうか? Kubernetes 上でサーバーレス環境を実現する OSS であるKnative をベースにした、新しい サーバーレスのサービスである、「 Cloud Run 」と「 Cloud Run on GKE 」が発表されました。どちらも現在 Beta 提供となっています。こちらはかつてそれぞれ「 Serverless Containers on Cloud Functions 」と「 GKE Serverless Add-on 」と呼ばれていたものです。
Cloud Run の基本的なところを理解するには、以下の動画がシンプルで具体的な利用方法もイメージ出来て良いと思います。
Cloud Run と Cloud Run on GKE の違いについては同じシリーズの以下がオススメです。
さらに内部アーキテクチャの違いは Google の Software Engineer の Ahmet がツイートした内容が分かりやすいです。
Next でも多くの Cloud Run 関連セッションがありました。そのいくつかをご紹介します。まず基本的なところ、他のサーバーレス製品のアップデートも含めて知りたいという方は こちらのセッションが良いです。
さらに Cloud Run に全振りしたセッションとしては以下がオススメです。Cloud Run のリソースモデルや、またCloud Tasks や Cloud Scheduler との連携、さらに具体的なユーザー事例まで盛り沢山です。また、このセッションを見る限り東京でも Cloud Run がすぐに使えるようになりそうです。
現状は何に使えそう?
Knative をベースにしているものの、今のところ Eventing は Cloud Run と Cloud Run on GKE 両方ともにサポートされておらず、当面は Web や API をホストする環境として使うことになると思います。ユーザーインプットはソースコードではなくコンテナイメージを使うため、これまで Google App Engine (a.k.a. GAE) にあったようなランタイム制約が無く、好きなプログラミング言語で好きなライブラリを使ってサーバーレスアプリケーションを実行出来ます。また GAE にあった制約、例えば 1 つのプロジェクトで複数のリージョンを選択出来ない等は Cloud Run を使うことで回避出来たり、Cloud Functions だと 1 instance で同時に 1 request のみの処理になるのに対して、Cloud Run は Concurrency をサポートし 1 instance で同時に複数の requests を処理するため、リソースの効率的な利用やコストの最適化が期待出来ます。
Cloud Run ではなくCloud Run on GKE が適するケース
本記事執筆時点 (2019 年 4 月 16 日) では、以下のようなケースにおいては Cloud Run on GKE を選択するのが良いでしょう。
vCPU の数を増やしたい場合
- Cloud Run は 1 vCPU で固定です。RAM は Max 2GB まで変更可能です。デフォルトは 256MB となります。Cloud Run on GKE では RAM に加えて vCPU の数も増やせます。
GPU を使いたい場合
- Cloud Run on GKE では GPU も選択可能です。また、 GPUやTPU の用途が機械学習なら、 今回発表されたMLのためのプラットフォームである AI Platform がサーバーレスでの学習や推論が可能です。
クローズドなネットワークで運用したい場合
- Cloud Run on GKE は VPC 内の GKE Cluster 上に 配置されるため、クローズドなネットワーク環境で運用可能です。
- 今のところ、Cloud Run には Firewall Serviceがないため、endpoint は Internet に 公開されます。ただし IAM による認証で呼び出し元を制限することが可能です。
Global Load Balancer を使いたい場合
- Cloud Run on GKE では Istio Ingress Gateway に加えて Global Load Balancer が使えます。
Istio (Service Mesh) を使いたい場合
- Cloud Run on GKE では Istio のトラフィックルーティングやセキュリティ機能を使うことが可能です。
us-central1 以外で Cloud Run を使いたい場合
- Cloud Run on GKE は GKE が利用可能な全てのリージョンで利用可能です。
gRPC や WebSockets を使いたい場合
- Cloud Run on GKE では gRPC や WebSockets を使うことが可能です。
機能面の比較だけ見ると Cloud Run on GKE の方が良いのでは?となりますが、Cloud Run on GKE の場合、GKE のクラスタ分の費用をまるっと払うことになるので、必要な時に必要なだけスケールしてお金を払うモデルで、コンテナベースの サーバーレス環境が欲しいなら Cloud Run を使うのがオススメです。さらに Cloud Run は Knative の仕様に準拠しているため、一定期間、request が無い場合、instance がゼロにまでスケールインし課金されなくなるので従来の PaaS などと比較してコスト面でも優位かと思います。利用期間がハッキリしているサーバーレスアプリケーションの実行環境に向いていそうです。
Knative
Knative 関連のアップデートセッションも ありましたのでご紹介しておきます。Knative 自体は現在 v0.5 リリースされたところですが、これまでの開発の歩みや開発自体の velocity などが紹介されています。Cloud Run 自体がこれからユーザーの利用が増え、サーバーレスのデファクトスタンダードになるか、ならないかは、Knative 自体がどれだけ広く業界に受け入れるかに掛かっているところもあるので個人的にはこのあたりの情報に注目しています。OSS 開発やコミュニティに興味のある方は是非ご覧ください。どうやらテストコード書いてくれる人を絶賛募集しているようです。
Google App Engine (a.k.a. GAE)
GAE のランタイムについてのアップデートです。以下の言語が GA となりました。
- PHP 7.2
- GO 1.11 ( 1.12 はBetaとして提供)
- Node.js 10
さらにJava 11 と Ruby 2.5 が Alpha 版として提供されることが発表されました。
特に Ruby については日本のユーザーで待ちに待った!という方が多いのではないでしょうか。以下のセッションで使い方やデモが紹介されています。
次に Serverless VPC Access が Beta 版として利用可能になりました。こちらの機能は GAE から VPC 内のリソースに対して直接アクセスを可能にするものです。例えば Compute Engine Instances や Cloud Memorystore Instances、Cloud SQL Instances などです。また VPC から Cloud VPN や Dedicated Interconnect などを経由することで On-premise 環境に設置したリソースへのアクセスも可能となりました。本機能によりバックエンドのアプリケーションやデータベースを Internet に公開することなく GAE から利用可能となり、よりセキュアにアプリケーションプラットフォームを構築・運用頂けるようになりました。
Google Cloud Functions (a.k.a. GCF)
続いて GCF のランタイムについてのアップデートです。以下の言語が GA となりました。
- Python 3.7
- Node.js 8 ( 10 は Betaとして提供)
- Go 1.11
さらに Go 1.12 と Java 8が Alpha 版として提供されることが発表されました。
ランタイム以外の機能拡充としては以下の通りです。
Max Instances (f.k.a. Scaling Controls) # Beta
- Function が実行される Instance 数に上限を設定する。
- 1 つのプロジェクト内で各 Function 毎にデプロイ時に指定が可能。
- GCF 側がオートスケーリングし過ぎた際にバックエンドのシステムへの過アクセスを防ぐ際に有用。
Serverless VPC Access # Beta
- GAE と同様、VPC 内のリソースに対してアクセス可能に。
Per-function identity
- Function 毎に個別のサービスアカウントを設定する。(デフォルトでは GCF は Editor role が付いた GAE のサービスアカウント を利用する)
- よりきめ細かいリソースへのアクセスコントロールを可能に。
Functions Framework
- OSS の FaaS (Function as a Service) framework
- Node.js 10 をサポート
- 書いた function に対してローカルの実行環境を提供
- CloudEvents に準拠したメッセージのアンマーシャリングを自動で実行
気になる GCF のリージョン展開ですが、利用可能なリージョンが新たに 2 箇所追加されました。
- us-central1 (US Central)
- us-east1 (US West)
- eu-west1 (Belgium)
- asia-northeast1 (Tokyo)
- [new]eu-west2 (London)
- [new]asia-east2 (Hong Kong)
その他サーバーレス関連サービス
Cloud Tasks
Cloud Tasks が GA になりました。GAE で非同期タスクを行う場合、長らく Task Queue が利用されていましたが、GAE からしか利用出来なかったものが、GAE 以外のサービス(例えば GCE や GKE 上のコンテナ)からも利用可能となり、より様々なユースケースで使いやすくなりました。主な機能は以下の通りです。
- Rate limits & Retry controls
- Dynamic Scheduling
- Dynamic HTTP targets
- Native GCP Auth (IAM) on HTTP
Cloud Scheduler
Cloud Scheduler が GA になりました。これまで GCP ではジョブを定期実行したい場合などに使える選択肢が GAE の Cron サービスしかありませんでしたが、Cloud Scheduler が登場したことにより、GAE に限らずScheduler API を通じて任意の HTTP Endpoint や Pub/Sub および Pub/Sub を経由し GCF や、GAE などを定期的に呼び出すジョブを設定することが出来るようになりました。
主な機能は以下の通りです。
- Repeating execution
- Configurable Retry
- Direct HTTP target
- Native GCP Auth (IAM) on HTTP
まとめは以上となります。少しでも皆さんの理解のお役に立てれば幸いです。Cloud Run をはじめ盛り上がりを見せている GCP のサーバーレスに今後も要注目です!今後もイベントやブログなどで情報発信していきますのでご期待ください m(_ _)m
Disclaimer: この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。
2019/04/17 追記: gRPC 及び WebSockets を利用したい場合は Cloud Run on GKE で利用可能な旨追記しました