(レポート)[ServerlessConf London] 「Serverless Microservices with Google Cloud Functions」 #serverlessconf

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

本レポートは2016年10月27日(木)〜28日(金)に開催されたServerlessConf Londonのセッション"Server less micro services with Google Cloud Functions"のレポートです。

gcp-cloud-functions

本セッションのスピーカーはGoogleでDeveloper AdvocateをしているBret Mcgowenさんです。

AWS Lambda相当の機能をGoogleはGoogle Cloud Functionsというサービス名で(ベータでもGAでもなく)アルファ提供しています。本セッションはGoogle Cloud Functionsを知らない人向けのデモを含めたサービス概要のプレゼンテーションです。

AWS LambdaやAzure Functionsを知っている人が、競合のGoogle Cloud Functionsではどういうことが出来るのかサクッと知る上では有用かと思います。

発表資料

動画

スライド

見当たらず

Googleとサーバーレス、Borgについて

  • Googleではサーバーレスが流行る前からサーバーレスアーキテクチャーを採用してきた
  • Googleでは内製のBorgというクラスター・マネージャーを運用している。
  • Borgの知見をもとにKubernetesを開発した
  • Googleではデータセンターを1台のマシーンとみなしてリソース活用している
  • マシーンはリソースの境界でしかない
  • 開発者はアプリケーションが各ノードでどのように動作しているのかは意識しなくてよい。Borgが面倒を見てくれる

gcp-cloud-functions

Google Cloud Functions について

  • Google Cloud Functionsを使う上ではBorgは意識しなくてよい
  • GCP向けのサーバーレスサービスとしてGoogle Cloud Functionsを提供
  • node.jsでプログラムを書ける
  • node.jsが選ばれた理由は以下
    • GoogleがコントリビュートしてきたJavaScriptエンジンのV8で動作する(V8はGoogle Chromeでも利用)
    • npm の資産が膨大
  • 2種類の用途がある
  • Background functions
    • Cloud Storage(GCPのS3風サービス)
    • Cloud Pub/Sub(GCPのPub/Sub風サービス)
    • などのイベントをトリガーに発火する
  • HTTP functions
    • ソーシャルメディア
    • クレジットカード支払い
    • などと連携して明示的に発火させる

サンプルコード

ハローワールドプログラム

実際のコードは数行から書ける

// Function triggered via HTTPS
exports.helloWorld = function hello (req, res) {
  res.status(200).send('Hello, London');
}
  • ユーザーからのリクエストは req オブジェクトにある
  • ユーザーへのレスポンスは res オブジェクトにある
  • リクエストは自動的にパースされ、リクエストヘッダー、リクエストボディーなどは簡単にアクセス出来る

パッケージ管理

JSONファイルで定義する

// Handling dependencies in Google Cloud Functions.
{
  "dependencies" : {
    "node-uuid": "^1.4.7"
  }
}

ユーザーが依存ライブラリをプリビルドしてアップロードすることも出来るし、クラウドでビルドさせることもできる

HTTP functionsデモ

デモ内容

helloWorldプログラムの開発フローのデモが行われます。 YouTubeビデオでは9分ごろからをご確認下さい。

  1. npmでパッケージ管理
  2. 依存ライブラリをJSONファイル(package.json)で定義
  3. デバッグライブラリ(@google/cloud-debug)をインストール
  4. ローカルで実行
  5. ブレイクポイントを設定して、ローカルで実行→プロセスにアタッチしてデバッグ可能
  6. ウェブ管理画面のオンラインエディターにブレイクポイントを設定して、実行→デバッグ可能

デバッグについて

Stackdriver Debuggerと呼ばれるサービス(機能)

  • プログラムの先頭に "require('@google/cloud-debug')" を埋め込むだけで利用できる
  • ブレイクポイントで実際のプログラムの処理が止まるわけではない。
  • Cloud Functionsの処理は最後まで実行されるが、ブレイクポイントの状態をキャプチャーし、管理画面なりエディターで再現される。
  • ログを仕込んで再デプロイといった対応は不要で、プロダクションコードの怪しいところにブレイクポイントを設定し、デバッグできる
  • この機能を利用しても、本番環境へのパフォーマンスのインパクトはほぼない。
  • このライブでバッグ機能は、node.jsを使っていれば、GCPに関係なく利用可能

デプロイするアプリのソースコード管理について

Github/Bitbucket/Google Cloud Source Repositoriesなどのレポジトリを指定する他、ローカルファイルシステムからZipなどでアプロードすることも可能

言語対応について

  • 今のところ node.js だけ。
  • 他の言語の対応もロードマップにはある

Background functionsデモ

デモ内容

YouTubeビデオでは24分ごろからご確認下さい。

  1. 写真アップロード -> Cloud Storage -> Cloud Functions -> Cloud Vision APIの連携
  2. Cloud Storageに顔写真をアップロード
  3. Cloud Vision APIで写真の表情などを推定
  4. ログで確認

デモ3:Twilio/NLP/BigQuery連携

デモ内容

YouTubeビデオでは33分ごろからご確認下さい。

  1. SMS送信 -> Twilio -> Cloud Functions -> Natural Language API->BigQueryの連携
  2. 今の気分をSMSで送信
  3. Natural Language APIで気分がPositive/Negativeで二値判定
  4. 判定結果をBigQueryに保存
  5. BigQueryでPositive/Negativeで件数をgroup by
  6. BigQueryでemojiの利用数をgroup by

BigQueryでは数十億行のJSONのパースでも数十秒で実行可能

まとめ

製品はアルファで招待制での利用に限定されますが、Cloud Functionsのは威力は十分に伝わりました。

Google Appsの各サービスと連携できるため、うまく使いこなくと、業務の効率化にも活用できそうです。

AWS Lambdaはデバッグや手間なので、オンラインでバッグ相当の機能はぜひともAWS Lambdaにも提供してほしいところです。