Приложение AWS Lambda scala Нет открытого метода с именованным дескриптором с соответствующей сигнатурой метода - PullRequest
1 голос
/ 02 июня 2019

У меня есть приложение 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.

...