OpenWhiskとは
最初に「OpenWhisk」の説明をしたいと思います。最近「サーバレス」という言葉を聞いたことがあるでしょうか? CodeZineの読者の方であれば、すでにクラウドサービスの中にもいろいろな種類があることをご存知だと思います。
最もポピュラーなクラウドサービスの提供形態はIaaSと呼ばれるOSを自身で管理できる環境が提供されます。代表的なサービスはAWSのEC2ですね。それ以外にもPaaSと呼ばれる利用者はプログラム実行環境(bin/lib/コンピュータリソース)を選択してアプリケーションを動かすことができるものもあります。代表的なサービスは、SalseforceやGoogleAppsそして今回ご紹介するBluemixがあります。
そのような状況の中で、さまざまなサービスを拡張する、または繋げるようなかたちでAWSがLambdaを発表しました。Lambdaはコードだけを管理しコードを実行するサーバについては何も考慮することなく実行することができる環境です。コードだけを管理するという概念的にはPaaSと同様ですがPaaSは実行する環境のリソースについては利用者が定義(例えばCPUは1core、メモリは512MByteなど)するのが一般的です。それに対してサーバレスの環境ではそう言った計算リソースは利用者は管理しません。シンプルにソースコードが実行されるのを期待されます。そしてスケーラブルに動作することが期待されサービスによっては実行回数などでコストが発生するという仕組みです。最近ではこのような仕組みを「サーバレス」と表現します。「サーバレス」がどのようなものであるかは、martinfowler.comでも解説されています 。この中ではサーバレスは「Function as a Service」であると定義されています。今回紹介するOpenWhiskもまたLambdaと同様にサーバレスを実現する環境であると言えるでしょう。
さて、OpenWhiskは、前出のAWS Lambda、GCP Cloud Functions、Azure Functionsと並ぶサーバレスを実現する環境であり、IBMが始めたオープンソースソフトウェアのプロジェクトです。このプロジェクトは現在GitHub上で開発されています。各社のサーバレスがプロプライエタリな製品(サービス)であることに対し、オープンソースソフトウェア(OSS)であるのは一つの特徴です。OpenWhiskはソフトウェアとしての側面ではサーバソフトウェアです。OSSで提供されているため、ユーザはサーバを用意し環境を作ることができます。IBMのBluemixでは、サービスとしてOpenWhiskも提供しています。そのためBluemixのOpenWhiskを使えば今すぐにサーバレスのプログラムを利用してみることができます。
実際の開発に関して利用できる言語についても順次拡張しており、JavaScript(Node.js)、Swift(Kitura)、Python、Javaなどが利用できて、変わり種としてDockerもサポートしています。これらの言語で小さい処理を簡単に動かす環境に向いています。いくつもの処理をつなぎあわせて使うことができる「Sequence(Chain)」と呼ばれる機能なども用意されており、UNIXのパイプライクに使うこともできます。
作るアプリケーションの概要
OpenWhiskには覚えるべき概念がありますが、ここでは作りたいアプリケーションから説明をしたいと思います。今回、単純ではありますが実用的な天気予報を教えてくれる仕組みを作りたいと思います。私は普段チャットツールのSlackを利用しているので、毎朝Slackのメッセージとして、この天気予報を受け取るようにします。
- 特定の時間(毎朝7:00) に実行する
- 天気予報を取得しSlackにメッセージを通知する
この2つの処理を行うことで実装を行いたいと思います。OpenWhisk的に図示すると以下のような図になります。具体的な説明は順次説明をしていきます。
今回は、OSSではなくBluemix上のOpenWhiskを利用することを前提とします。OSSの場合には若干異なるものがあるのでご注意ください。また開発に際しては、Webブラウザを利用する方法とCliを利用する方法があります。基本的にはWebブラウザで実施しますが、本稿ではCliも利用してます。Cliの導入方法については説明を省かせていただきますが、コンソール画面上に表示される方法で特に問題なく利用できるかと思います。