У меня есть приложение scala, которое я развернул на AWS lambda.Ранее моя подпись класса Main
выглядела так:
object Main extends App {...}
Благодаря этому я смог предоставить обработчик в определении AWS Lambda, которым Lambda была довольнабежать.Проблема, с которой я столкнулся, заключалась в том, что возврат лямбды всегда был null
.
Чтобы преодолеть эту проблему null
при интеграции со шлюзом API, я начал использовать Java-интерфейс Lambda.Я сделал Main
a class
, который расширяет RequestHandler
package example
import com.typesafe.scalalogging.LazyLogging
import com.amazonaws.services.lambda.runtime.{Context, RequestHandler}
class Main extends RequestHandler[String, String] with ArgParser with LazyLogging {
override def handleRequest(input: String, context: Context): String = {
val (wins, losses) = /* ... */
s"""{"wins":$wins,"losses":$losses}"""
}
Если я предоставлю обработчик example.Main::handleRequest
, я получу следующую ошибку:
(Мой настоящий обработчик содержит полное имя пакета, которое работало до того, как я ввел RequestHandler
, поэтому я уверен, что это не опечатка в обработчике .)
{
"errorMessage": "No public method named handleRequest with appropriate method signature found on class class example.Main"
}
IЯ использую следующую зависимость:
"com.amazonaws" % "aws-lambda-java-core" % "1.2.0"
Определение моей лямбды определено в коде Terraform здесь , а мой jar
хранится в s3
.