皆さん、サーバーレスしてますか!? 新卒2年目バックエンドエンジニアの otofu-square です。 最近の業務では Serverless Framework 上で TypeScript を使ったサーバーレスな Web アプリケーションの開発を行っています。
さて、東京では 11/2(金) 〜 11/3(土) にかけて Serverlessconf Tokyo 2017 が開催されています!
私は両日参加予定ですが、本日は IBM 本社にて「Develop a Serverless Wheatherbot with IBM Cloud Functions, Apache OpenWhisk and the Serverless Framework」というタイトルのプレカンファレンスを聞きに行ってきました。そこで聞いてきた IBM Cloud Functions について AWS Lambda と比較しながらまとめ、説明後に行われたワークショップセミナーについて簡単に触れたいと思います。なお、サーバーレスアーキテクチャ自体の説明は割愛するので、興味があってまだご存じない方は以下の記事が参考になるかと思います。
サーバレスアーキテクチャとは何か?~AWS LambdaとAPI Gatewayによる簡単なAPIの実装を試す (1/3):CodeZine(コードジン)
【3分で読める!】サーバレスアーキテクチャって何?エンジニアが憧れるクラウドを活かしたシステムのご紹介 – サーバーワークスエンジニアブログ
当日の流れ
IBM 本社の 6F セミナールームにて 10:00 〜 15:00 の日程で行われました。Serverlessconf のために来日した IBM の Technical Product Manager の @AndreasNauerz を講師として、前半1時間半ほどが IBM Cloud Functions の紹介、以降が実際に手を動かして触ってみるワークショップという形で実施されました。
IBM Cloud Functions とは
IBM が展開する Bluemix というクラウドサービス上で提供される Function as a Service(以下 FaaS )です。ざっくり説明すると、コードの実行環境の用意やメンテナンスを全く気にすることなく、アプリケーションのコードだけをデプロイするだけで動かすことが出来る素敵なサービスで、サーバーレスアーキテクチャを設計する際には非常に重要なポジションを占めるものになります。Apache OpenWhisk という FaaS の実行基盤の OSS のプロジェクトを用いてサービスが提供されており、IBM Cloud Functions は Apache OpenWhisk のマネージドサービスと捉えることが出来ます。少し前までは IBM OpenWhisk という名前で提供されていましたが、OSS のプロジェクト名との混乱を避けるために IBM Cloud Functions に改称されたようです。
IBM Cloud Functions のスゴいと思ったところ
私は今まで FaaS といえば AWS Lambda しか触ったことがなかったため、主にそれと比較してスゴいと思ったところをご紹介します。
クラウドサービスのベンダーにロックインされない
前述の通り IBM Cloud Functions の実行基盤は OSS の Apache OpenWhisk なので、IBM 独自のブラックボックスで動いているわけではありません。例えば AWS Lambda ではその実行基盤自体は公開されていませんよね。つまり IBM Cloud Functions が提供しているのは単純に Apache OpenWhisk のマネージドサービス であり、他のクラウドベンダーが Apache OpenWhisk を提供する場合はそちらに 乗り換えたり並行稼動させることが可能 なわけです(現時点で OpenWhisk のマネージドサービスは IBM だけのようですが)。また、Apache OpenWhisk はコンテナベースでデプロイ可能なので、自前で Kubernetes や Apache Mesos によるコンテナクラスタを用意して実行基盤を構築することが可能 です。
実装言語の選択肢が豊富(Docker も使えるよ)
IBM Cloud Functions では、 Function の実装言語として Node.js, Swift3, Java, Docker, Python3, PHP の6つをサポート しています。この数は他の FaaS を圧倒していてそれだけでもスゴいのですが、さらに注目すべきところは Dockerをサポート している点です。なんとバイナリにコンパイルされる言語であれば Docker 上で Function として実行することが可能です。実例として Golang や Haskell, Scala, Rust を OpenWhisk 上で実行した例があるようです。
API Gateway が無料で使える
これは驚きました。IBM Cloud Functions では Function を Web API として実装することが出来るのですが、その際のエンドポイントを提供する API Gateway という機能がなんと 利用料が無料、かつ無制限で使用可能 なのです。AWS Lambda でも同様に Amazon API Gateway というサービスが存在しますが、こちらはリクエスト数やデータ通信量に応じた課金が発生します。
Composer という仕組みがアツい
Composer は IBM が研究開発した Apache OpenWhisk 上で各 Function を連携させて実行するためのプログラミングモデル だそうです。この仕組みは2週間ほど前の Serverlessconf NewYork 2017 で発表されました。この仕組を使うとプログラミングでよく見かける if
や while
などを使って各 Function の呼び出しを制御することができます。例えば DB からレコードを検索する Function を実行した際に、レコードが見つかれば Function A を実行し、見つからなければ Function B を実行するという制御フローを記述することができます。また、それを Electron 上の GUI で閲覧する IBM Cloud Functions Shell というツールも開発中らしく、Composer で作られた制御フローを分かりやすい図で確認することができるようです。こちらも今後が楽しみです!
Composer についてはまだ情報が少ないですが、以下の記事が参考になると思います。
OpenWhisk Workshop
ここからは説明後に行われたワークショップについて簡単に紹介します。
IBM Cloud Functions についての紹介が終わった後は実際に手を動かしてみましょう!ということでワークショップが行われました。ワークショップ内で使用した資料は GitHub 上に公開されており、IBM Bluemix に登録して IBM Cloud Functions が使えるようになっていればすぐにでも始めることが出来るので興味がある人は是非やってみてくださいね!
ワークショップは、大体以下のような内容が含まれています。
- IBM Cloud Functions の登場人物を学ぶ ( Action, Trigger, Rule, Package )
- IBM Blumix CLI を使ってコンソール上から IBM Cloud Functions を触って作って動かしてみる
- IBM Blumix の Web UI 上から IBM Cloud Functions を触って作って動かしてみる
- 天候情報を教えてくれるアプリケーションを実装する
- Composer を使って Function の連携を制御する
- Serverless Framework を使って開発を楽にしてみる
- Node-RED を使った IoT なアプリの実装
見ていただければお分かりいただけるかと思いますが、 非常に濃密な内容になっています。これを一通りやれば IBM Cloud Functions の美味しいところを一通り触れるんじゃないでしょうか。これだけしっかりした内容の資料が GitHub で見られるのは素直にスゴいなと思います。
ワークショップの時間中にはもちろん全て終えることはできないため、各々気になるところを触ってみるという形で行われました。途中講師の @AndreasNauerz や IBM 本社の日本人スタッフの皆さんに質問しながら進めていく環境になっていたので非常に心強かったです!
まとめ
AWS Lambda しか殆ど触ったことのない自分でしたが、今日 IBM Cloud Functions について話を聞いてみて俄然興味が湧きました。特に
- 実行基盤が OSS なのでクラウドサービスのベンダーにロックインされない
- Action, Trigger, Rule といった概念がシンプルで分かりやすい
- Package の再利用性が高い
- バイナリで動きさえすれば Docker で好きな言語をビルドして動かすことが出来る
- Composer を使って Function 間の連携をプログラムライクに書くことが出来る
という点はかなり魅力的ですし、IBM Cloud Functions や Apache OpenWhisk ならではの強みだなと思います。しかし一方で、すでに FaaS として事実上のデファクトスタンダードにある AWS Lambda に対しては、今までの運用ノウハウや採用事例などではまだまだ負けているかなというのも否めません。
個人的には今後も Apache OpenWhisk, IBM Cloud Functions を追っていって、その強みや欠点などを実際に使ってみる中で見つけていけたらなと思っています。ひとまずは上で紹介したワークショップを終わらせて色々なサンプルを実装して、個人的に今興味がある Haskell を使って何かアプリを作れないか試してみたいなーと野望をいだいています。Kubernetes 上で OpenWhisk を立ち上げてみるのも面白そうですね。
いずれにしても今後の FaaS の舞台では一目置かれる存在であることは間違いないので、みなさんも興味があれば是非触ってみてくださいね!