Scala
serverless

serverlessでScalaをLambdaにデプロイ

ServerlessFrameworkでScala+Lambda+APIGateway構成プロジェクトを作成を参考にserverless frameworkを使ってScalaプロジェクトをLambdaにデプロイしてみる。

プロジェクトディレクトリの作成

mkdir [your_project_dir]
cd [your_project_dir]

serverless framework のインストール

npm install --g serverless

なぜかproject/plugin.sbtの下記の場所を削除しなければ動かなかった

  1 addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.0")

serverlessでLambdaへデプロイ

sls deploy --verbose

作成したFunction及び関連サービスを削除

sls remove -v

skinny-json周りでいろいろと変更する必要があった。

build.sbt

libraryDependencies ++= Seq(
...
  "org.skinny-framework" %% "skinny-json" % "2.5.2"

バージョンが進んでいるので最新に合わせる

Response.scala

package hello

import scala.beans.BeanProperty
import skinny.json4s.JSONStringOps._

case class Response(@BeanProperty body: String, @BeanProperty headers: Map[String, String], @BeanProperty statusCode: Int)
object Response {
  val contentJson = "Content-Type" -> "application/json"
  def apply(body: Map[String, Any], headers: Map[String, String] = Map(contentJson), statusCode: Int = 200) = {
    new Response(toJSONString(body), headers, statusCode)
  }
}

skinny.util.JSONStringOps ではなくskinny.json4s.JSONStringOpsを読み込む

ここまで設定したらserverlessでLambdaとAPIGatewayにデプロイしてみる

sls deploy --verbose

無事デプロイできた。
APIGatewayのテスト実行でもstatus=200を返すようになった。

細かい差異については後日もう少し付け足す予定です。
ようやくScalaでのbatch && API環境が整いそうです。