Scalaアプリケーションをlambdaで動かす
とりあえずこれ見ながらやってみる
上のページはこれを参考にしているらしい
使えるランタイムはjava8かjava11
request handlerっぽいクラスを定義すればエントリーポイントとしては十分らしい
引用: https://tasotasoso.hatenablog.com/entry/2019/07/20/230824
package example
import scala.collection.JavaConverters._
import com.amazonaws.services.lambda.runtime.Context
import com.amazonaws.services.lambda.runtime.RequestHandler
trait RepeatBase {
def repeat(testPhrase: String, context: Context) = {
println(testPhrase)
}
}
class Repeat extends RepeatBase
必要っぽいsdk
"com.amazonaws" % "aws-lambda-java-core"
バージョンず
で固める
assembly時のMANIFEST.MFの重複は以下で解決
気軽にassemblyすると250mbの制限に引っかかるのでjarじゃなくてimageに固めるのがいいかもしれない
250超えたのは多分awssdkをまるまる入れたから臭い
image作るときにassemblyするのがよさげ
terraformでlambda建てるときはこんな漢字で良さげ
software.amazon.awssdk.core.exception.SdkClientException: Unable to load an HTTP implementation from any provider in the chain. You must declare a dependency on an appropriate HTTP implementation or pass in an SdkHttpClient explicitly to the client builder.
例外発生
メモリ512MBにしたらmetaスペースが足りなくてoutOfMemory
ヒープ設定いじっても面倒だからメモリ上げて解決
こんな感じでできた
cloud watch eventsでトリガーしてると、走らせるメソッドのインターフェースは
def run(data: Any, c: Context) = ...
とかdataをAnyにしておかないとパースエラーで死ぬ
もちろんデータ型調べてそれの型書いても可能