Bluemix
- OpenWhisk+Scalaで作るServerless Architectureとっかかり (24 Jan 2017 | Tags:
OpenWhisk+Scalaで作るServerless Architectureとっかかり 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は米国南部リージョンでしか使えないので注意。 ↩
LinkLatest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型
Recent Books:
- BluemixにPlayframeworkアプリケーションをデプロイする (22 Jan 2017 | Tags:
BluemixにPlayframeworkアプリケーションをデプロイする BluemixにPlayframeworkアプリケーションをデプロイする
Bluemixを触りだしたので、HelloWorldとしてWebアプリケーションをデプロイしてみた。
準備
- Playframework 2.5.10
- Scala 2.11.7
- CloudFoundry CLI
上記に加え、Bluemixのアカウントの登録、適当なアプリケーションが実装済みの前提で進めます。
デプロイ対象を生成する
sbt dist
でzipファイルを生成する。 [APPLICATION_NAME] etc..はプロジェクト固有の値になっているので、適宜読み替え。> sbt dist ・・・ [info] Your package is ready in /~/[APPLICATION_NAME]/target/universal/[APPLICATION_NAME-VERSION-SNAPSHOT].zip
manifest.ymlファイルを作成する
プロジェクトルートにmanifest.ymlを作成。 [HOST_NAME]、 [NAME] は任意の値を設定。 path の設定は、↑のzipファイルのパスを指定。
applications: - host: [HOST_NAME] name: [NAME] buildpack: java_buildpack path: ./target/universal/[APPLICATION_NAME-VERSION-SNAPSHOT].zip instances: 1 memory: 512M
認証
Bluemix登録時のメールアドレスとパスワードを聞かれるので、入力する。
> cf login API エンドポイント: https://api.ng.bluemix.net > Email > Password
APIエンドポイントの設定
↑で認証したエンドポイント以外を使う場合、エンドポイントを指定しなおす必要がある。
今現在、使用できるエンドポイントは以下の3つ。
- 米国南部
- 英国
- シドニー
それぞれ設定が異なるので注意。
使用する組織、スペースが異なる場合も別途設定。
cf api https://api.[REGION].bluemix.net
エンドポイント REGION 米国南部 ng 英国 eu-gb シドニー au-syd
デプロイ
> cf push ・・・ 要求された状態: started インスタンス: 1/1 使用: 512M x 1 インスタンス URL: [HOST_NAME].au-syd.mybluemix.net 最終アップロード日時: Mon Jan 22 02:33:15 UTC 2017 スタック: cflinuxfs2 ビルドパック: java_buildpack 状態 開始日時 CPU メモリー ディスク 詳細 #0 実行 2017-01-22 11:34:21 AM 0.0% 512M の中の 964K 1G の中の 1.3M
こんなような出力がされて、完了。
URL を叩くと、アプリケーションの動作を確認できる。
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型
Recent Books: