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にしておかないとパースエラーで死ぬ
もちろんデータ型調べてそれの型書いても可能