投稿者:常田

Cloud Runとは

Containerで構築されたRESTアプリケーションを実行するサービスです。実行にはパブリックのマネージドサービスと、GKEを利用する事が出来ます。GKEはVPCに対応してますので閉じた中で利用する事が出来そうです。 内部的にはKnativeを利用したサービスとの事でした。ステートレスな(デーモン型でなくリクエストに応答し処理を実行し終了する)処理を担います。 これまでのCloud Functionでは利用できる開発言語や実行時間に制限がありましたがCloud runではそのあたりは、無さそうです。

利用出来そうなケース

  • 非同期で処理するバックエンド
  • スケジュールなどから起動して動くバッチ処理
  • Sorryなど非常に稀なケースで動作するHTTP server

利用の開始

すでに利用を開始することが出来ます。

2019-04-15 19.45.11.png

サンプルプログラム

色々すでに言語が出ているので今回はPython(Flask)を利用して見ました。 HTTPでリクエストすると 'Hello world from Cloud Run!!' と出力されれます。

  1. Python Flaskのコードを記載
  2. Dockerfileを記載しコンテナ化(この際PORT環境変数で起動ポートが変更できないと行けないようなので気をつけます)
  3. Google Source Repositoryへ git push を行う
  4. Google Buildで自動ビルドを有効化しておく
  5. Cloud Run にて登録
  6. 公開されているURLにアクセスします。
??? curl -i https://flask-cloud-run-qpbhiqpgba-uc.a.run.app
HTTP/2 200 
content-type: text/html; charset=utf-8
x-cloud-trace-context: b931b673ea22d6e29da81b76fdfc4729;o=1
date: Thu, 11 Apr 2019 05:14:37 GMT
server: Google Frontend
content-length: 28
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"

Hello world from Cloud Run!!%   

このようにHTTPといして動作していることがわかりました。非常に簡単に動作しますね。

JSON形式を応答する

次にFlaskを利用してJSONを返却してみます。

??? curl -i https://flask-cloud-run-qpbhiqpgba-uc.a.run.app/json
HTTP/2 200 
content-type: application/json
x-cloud-trace-context: cdbdd7a0263206293be1278f6501b844;o=1
date: Thu, 11 Apr 2019 05:16:38 GMT
server: Google Frontend
content-length: 60
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"

{"msg":[{"id":1,"message":"Hello world from Cloud Run!!"}]}

動作してみると application/json で応答がされていることがわかります。素直にコードの状態が反映していますのでHTMLやJSONなど色々な用途で利用できることがわかります。 初回のリクエストに応答後は、即座に返信がくるため一般的なServerlessと同様にコールド状態からリクエストが来た段階でウォームアップ状態になることがわかります。

GKEへのデプロイ

GKEのクラスタ上にも先程のアプリケーションはデプロイ出来ます。GKE上でServerlessを利用する仕組みは色々あります。今回は、Cloud Runで実行をしてみます。

GKEのクラスタで Enable Cloud Run にする必要があります。そのためには以下の項目にチェックを付けてクラスタを作る必要があるので注意しましょう。

  • Select Enable Stackdriver Logging service.
  • Select Enable Stackdriver Montoring service
  • Select Try the new Stackdriver beta Monitoring and Logging experience
  • Select the Enable Istio (beta) checkbox.
  • Set Enable mTLS to Permissive.
  • Select the checkbox Enable Cloud Run on GKE (beta)

実行先を以下のように選択します。

2019-04-15 19.38.34.png

この状態のGKEは以下のようになっています。

2019-04-15 19.39.42.png

Cloud Run側では以下のようになります。

2019-04-15 19.40.13.png

  • GKE上にデプロイしたところ 接続が出来ませんでした。外部名称が解決できてないためかと思われます。
  • デモでは動いていたのでなにか設定が漏れているのか

まとめ

Knativeに対応したことでGCP上でのアプリケーションのデザインの仕方が一つ増えました。 Knative用のYamlも生成されていますのでオンプレミスのKubernetes環境やIBM CloudなどKnativeをサポートしている環境などにもデプロイができそうです。これまでServerlessはCloud Functionだったのですが実際にFuncitonsに比較して実行時間が長い、コードを好きな言語で記述できるなどコンテナのメリットやGKEで動かすことによるVPC対応など気になる点が非常に多いサービスがでてきたなという印象です。Functionのようにイベント駆動形というよりは、システム的にはバッチ処理系のほうが親和性が良さそうですね。