OpenWhisk+Scalaで作るServerless Architectureとっかかり
最近マイクロサービスやサーバーレスアーキテクチャが気になるので、手習いに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使えるようにはなったので、モノリシックをマイクロにするぞ。
-
現在、OpenWhiskは米国南部リージョンでしか使えないので注意。 ↩
Link
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型