Serverlessconf Tokyo 2017で"Open source application and Ecosystem on Serverless Framework"というタイトルで発表してきました #serverlessconf

Serverlessconf Tokyo 2017に2日に渡って参加してきました!ワークショップも参加しました!発表もしてきました!以下レポートです!

Day1: Workshop

朝9時から夜9時までというハードコアなワークショップでした。

Serverless Tech Challenge with AWS Serverless Services

「本日のお題は

  • AWS以外のIaaS、PaaS利用禁止
  • 認証機構があること
  • 画像アップロード機能があること
  • CI/CDを回すこと
  • モニタリング機構があること

という条件のもと

  • 掲示板
  • SNS
  • マッチングアプリ
  • チャット

のどれかを作ってみよう。では、Go!」

という硬派な投げっぱなしジャーマンのようなチャレンジでした。

自分は、 comuttun さんと2人の急造チームでの参戦に。

まずは、お互いの自己紹介とAWSスキルを共有しあって、今回はサーバーレスについて自分が少し知識があったのでServerless Frameworkを使うことにしてもらいました。

Cognito User Poolを使いこなせない2人

なんと、Cognito User Poolの利用方法を2人でそれぞれ調べるというところからスタート(外部サービスが使えればOAuthとかでいろいろ省略できたのですがそれはNGだったので。。)。最悪なスタートです。

この時点で何を作るのかは未定。「とりあえず認証機構を実装できてから。話はそれから」という状況で、SAさんに質問しながら実装を進めました。

マッチングアプリとは何か

認証機構ができたところらへんで、いったんcomuttunさんが諸事情で離脱。

その間に容易に設計できそうなものとして、まずチャットを選択して設計しました。

  • チャットのメッセージ更新自体はロングポーリングで妥協。
  • コメントはJSONファイル、画像アップロードはそのまま画像ファイルで、時系列に並ぶようにS3にオブジェクトとして保存
    • /rooms/{roomName}/messages/{reversedUnixtime}.{json|jpg} (Reversed Timestamp ID)
    • 細かい情報はS3 Object Taggingに格納 (S3 Object Tagging)
  • あとはAPI Gatewayで各ルームのチャットメッセージのCRUDを作ればOK

というような、まさに今回発表予定だったTipsをフル活用した感じで設計。まあ、できそう。

掲示板やSNSはなんとなくRDBの無い世界では面倒そうということで、次設計してみるのはマッチングアプリかな?と思っていたところで、comuttunさんが合流。

チャットの設計を説明した上で、「そもそもマッチングアプリってなんだ?」という話に突入。

そう、2人ともマッチングアプリ自体を知らないという。。。

  • 「マッチングアプリってPairsとか?」
  • 「人と人をマッチングすればマッチングアプリ?」
  • 「いい感じで相手をリコメンドすればいいってことか」
  • 「要件として画像アップロード機能が必要だからセルフィーをアップロードしてもらって、Amazon Rekognitionで画像を解析して得たパラメータ使えば良いのでは?」
  • 「Male/FemaleパラメータとはHappyパラメータとかあるから良さそう」

という感じで「想像で」マッチングアプリを設計しました。

で、この時点で明らかにチャットアプリのほうが設計の精度は高くて「チャットかな」と思っていたら

comuttun 「Amazon Rekognition使ったことないし、せっかくだからマッチングアプリにしよう。面白そう」

という無謀な発言が飛び出て、ずっとコード書いてるハイテンションからか、そのまま採用されて

  • comuttun: Amazon Rekognition
  • k1LoW: API Gateway経由での画像アップロード

という分担で開発再開。

結果、見事に時間が足りず撃沈しました。

俺達はスケジュール管理ができない!あと2時間あれば機能は実装できた。。。!!

Introducing a new event-driven world with Serverless Framework

間髪入れずに次のワークショップに参加。

OSSなFaaSの体験と、Event Gatewayの体験というワークショップでした。

GCPの利用も初なのに、GKE -> k8s -> kubelessと盛りだくさんなOSS FaaS体験と、BigQuery + Event Gatewayというこれまた初体験づくしなEvent Gateway体験でした。

途中、最新VerのServerless Frameworkの不具合が発見されたりしましたが、後日 comuttun さんがなおしてPRを出していたという最高イベントも発生しました。

Day2: Conference

カンファレンスも最初から参加しました。

"サーバーレス"を語るときに僕が語ること

"サーバーレス"は未だに定義が曖昧で、たぶんこのまま曖昧のまま進んでいきそうな雰囲気ですが、「サーバ管理レスだけ考えているとPaaSに毛の生えたもので世界が終わっちゃうぜ」という話で、特に「例えばEvent Driven Architectureという文脈で考えてみようぜ」という話でした。

自分もいくつかサーバーレスなツールやアプリケーションを作りましたが、「良く」作るためにはそれなりに考える必要があります。そしてそれはいつものLAMPアプリケーションとは違うという。。

ここらへんがうまく言語化できたり体系化できたりすると、サーバーレスの世界から離れたときも活用できるアーキテクチャを得ることができそうな気がします。

個人的には、「削られた最後の1ページ」も公開して欲しかったですw

サーバレスアーキテクチャによる時系列データベースの構築と監視

個人的に楽しみにしていた発表です。

MackerelというSaaSのバックエンドの根幹になる時系列データベースを独自に再構築した、しかもAWSマネージドサービスをフル活用している、というのは個人的に非常にワクワクする話で、今までdiamondについて言及したブログエントリーや発表もずっとウォッチしていました。

それはあたかも(AWSがRDMSを新たに再構築してRDBMSの各構成要素を水平分割するという新たなアーキテクチャを編み出した)Amazon Auroraのようで、Redis -> DynamoDB -> S3という局所参照性に合わせてうまくデータが移動して保存される様は「めっちゃ考えて編み出したアーキテクチャだ」というのが分かって最高です。

そんなプロダクションで稼働しているdiamondの監視とチューニングについての今回の発表は、まさに「プロダクション」であり、勉強になりました。

Step FunctionsとAWS Batchでオーケストレートするイベントドリブンな機械学習基盤

www.slideshare.net

機械学習の話というよりもStep FunctionsとAWS Batchの実践的な知見の発表でした。むしろとても良かったです。

コンポーネントごとに説明があって、それぞれで活用できそうな雰囲気でした。

個人的にはこのあとスポンサーブースで聞いた「いかに管理コストを下げるか」についての熱い思いの話が面白かったです。

The mind of Serverless as a Software

slideship.com

既存のアーキテクチャの流れとServerlessはつながっているという話から、1つ1つステップを踏んで、実際に設計をしていく際の指標を「少し強めに」指し示してくれる発表でした。

FaaSとFunctional SaaSをしっかり定義した上で、それぞれのつまづきポイントを「分けて順番に」説明してくれたので、混乱せず、と同時にワードの理解もはっきりできました。

少しサーバーレスをかじった人に紹介したい資料です。

Open source application and Ecosystem on Serverless Framework

github.com

自分の発表です。

予想外に多くの方に聞いてもらえてよかったです。(書けない英語で一生懸命書いたのですが、残念、海外の方は会場に1名でした)

伝えたかったことは発表した順番とは前後しますが、

  • Serverless Frameworkはインフラからロジックまで1コマンドで展開できる強力なツール
  • 例えば、1コマンドでサーバーレスでフルマネージドなアプリケーションを展開できると、ユーザにとってはそのアプリケーションを構成する要素は気にならなくなる(=隠蔽される)
  • ユーザにとっては、あたかもその機能を提供してくれる「ミドルウェア」や「サービス」に見える(抽象化される)
  • また、例えば、1コマンドをさらにHeroku Deploy Buttonみたいにさらに簡略化すれば、OSSなサーバーレスなツールやアプリケーションの展開が広がるのでは?(そして実装してみた)
  • OSSな「サーバーレスミドルウェア」や「サーバーレスサービス」が多くでてきて開発を助ける世界が来て欲しい

という感じです。

ところで、質疑応答で「サーバーレスミドルウェアとマイクロサービスは同じでは?」という質問をもらいました。

そのとき、質問していただいた方にうまく説明できず申し訳なかったのです。

ちなみに個人的には「同じではない」というイメージです。

nekoruriさんがとてもわかりやすい説明をしてくれたのですが、「マイクロサービスは責務による分離、サーバーレスミドルウェアは機能による分離」というものです。

構成要素がマネージドサービスのみだったり(マイクロサービスではその限りではありませんが)、抽象化されて扱われるという点では同じかもしれません。

マイクロサービスは作りたいサービスの文脈に沿って分割・抽象化されているのに対して、サーバーレスミドルウェアは「ある機能を抽象化しようと構築されたもの」を指したつもりでした。

例えば、マイクロサービスの1要素は(おそらく)そのサービスの文脈に特化して実装されていますが、サーバーレスミドルウェアとして構築された「時系列データベース」は、時系列のデータを取り扱う機能を実現するために構成されているので、他の時系列を取り扱いたいサービスでも抽象化されたまま活用できる可能性があります。

もともと「サーバーレスミドルウェア」というか「抽象化されたミドルウェア」という考えは、はてなさんのdiamondに対しての発表とアーキテクチャを見て感じたことです。 1つのソースコード/サーバ上で構築されたわけではなく、マネージドサービスを横断して活用していて、それでいて「時系列データベースを作った」と表現しているのをみて「あ」と思いました。

faultlineの実装を通じて「SaaSっぽいもの(サーバーレスサービス)は作れる」という実感はありましたが( Serverless Meetup Fukuoka #1で発表 )、今回はそれをさらに推し進めて「サーバーレスミドルウェア」という世界もあるのでは?と思った次第です。

なんか、そんな、感じです。

その他

サーバーレスおじさんユニフォームをもらったり、サーバーレスの厚い本をGetしたり、スポンサーブースで時間の許す限り興味のままにいろいろ質問しまくったり最高でした。

ちなみに今回のハイライトはカンファレンス後の呑みで、1年ごしにhorike37さんにサーバーレスな相談をしたら、サーバーレス過激派の人や北海道のサーバーレスおじさんやEmacs実践入門の人にパラレルにつっこまれ、見事に爆散したことです。

Serverlessconf Tokyo 2017、カンファレンス運営の皆様、発表者の皆様、スポンサーの皆様、参加者の皆様ありがとうございました!