最近マイクロサービスやサーバーレスアーキテクチャが気になるので、手習いにOpenWhiskを使って、以前作ったモノリシックなサービスをマイクロサービスっぽく分割してみようと思う。

とりあえずOpenWhiskでHelloWorld。

準備

今回はBluemix上のOpenWhiskを対象に進める。

  • Bluemixアカウント1
  • Scala 2.11.6
  • sbt 0.13.13

OpenWhisk CLIインストール

ggって出てくるブログだとインストールにはpipが必要と記載してあるものもあるけど、今はpipは不要になったようです。

Download OpenWhisk CLIから、実行可能なwskファイルを落とします。

あとは↑の記載の通りに進めればOK

echoアクションを実行して、

wsk action invoke /whisk.system/utils/echo -p message hello --blocking --result

↓のように帰ってくればインストールは完了

{
	"message": "hello"
}

アプリケーションの作成

GoogleのGsonを使うので、build.sbtに依存関係を追加。

基本的に、JsonObjectを受け取って、JsonObjectを返すエントリーポイントを作るだけです。

こんな感じ。

package com.github.modalsoul.sampleaction

import com.google.gson.JsonObject

object SampleAction {
  def main(args:JsonObject):JsonObject = {
    val obj = new JsonObject()
    val name = if(args.has("name")) {
      args.getAsJsonPrimitive("name").getAsString()
    } else "World"
    obj.addProperty("greeting", s"Hello ${name}!")
    obj
  }
}

アプリケーションのビルド

デプロイするjarファイルを作成します。

sbt packageだと依存するライブラリ(今回だとgson)を取り込んでくれないので、sbt-assemblyを使う。

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")

sbt assemblyを実行すると、./target/scala-2.11/配下にjarが生成されます。

OpenWhiskアクションの登録

[ACTION_NAME] , [APPLICATION] , [MAIN_CLASS_FULLNAME] は適宜読み替え。

> wsk action update [ACTION_NAME] target/scala-2.11/[APPLICATION].jar --main [MAIN_CLASS_FULLNAME]


ok: created action [ACTION_NAME]

動作確認

wsk action invoke --blocking --result [ACTION_NAME]  

↓のように帰ってくれば成功です。

{
    "greeting": "Hello World!"
}

↓のようにするとパラメータを渡すことができます。

wsk action invoke --blocking --result [ACTION_NAME] --param name HOGE
{
    "greeting": "Hello HOGE!"
}

おわり

作ったサンプルのプロジェクトはこちら

これでなんとなくOpenWhisk使えるようにはなったので、モノリシックをマイクロにするぞ。

  1. 現在、OpenWhiskは米国南部リージョンでしか使えないので注意。