AWS API Gateway позволяет передавать информацию, такую как метод HTTP, путь запроса, заголовки и т. Д., В AWS Lambda с помощью Lambda Proxy Integration .
После настройки этого параметра.успешно включите в ваш проект библиотеки aws-lambda-java-core и aws-lambda-java-events .
В SBT:
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-lambda-java-core" % "1.2.0",
"com.amazonaws" % "aws-lambda-java-events" % "2.2.3"
)
Это официальные библиотеки AWS для разработки лямбда-функций AWS в Java / Scala.
Кроме того, вам потребуется библиотека обработки JSON, например, circe .
В SBT:
val circeVersion = "0.10.0"
libraryDependencies ++= Seq(
"io.circe" %% "circe-core",
"io.circe" %% "circe-generic",
"io.circe" %% "circe-parser"
).map(_ % circeVersion)
Теперь вы можете легко адаптировать ваш обработчик для использования новой модели:
import scala.collection.JavaConverters._
import com.amazonaws.services.lambda.runtime.events.{APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent}
import com.amazonaws.services.lambda.runtime.{Context, RequestHandler}
import io.circe._, io.circe.generic.auto._, io.circe.parser._, io.circe.syntax._
// TODO: Import your Request class!
object Handler extends RequestHandler[APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent] {
override def handleRequest(input: APIGatewayProxyRequestEvent, context: Context): APIGatewayProxyResponseEvent = {
def log(message: String): Unit = context.getLogger.log(message)
log("--- Received new request ---")
log(s"Method: '${input.getHttpMethod}'") // Example use of HTTP method
log(s"Proxy Path: '${input.getPath}'") // Example use of request path
val request = decode[Request](input.getBody) // Decode request using circe
request match {
case Right(req) => // TODO: Implement business logic
case Left(req) => // TODO: Implement error handling
}
val response = new APIGatewayProxyResponseEvent() // Example for a response
.withStatusCode(200)
.withHeaders(
Map(
"Content-Type" -> "text/raw",
// TODO: Add your own headers
).asJava // Convert the Scala Map to a Java Map
)
.withBody("Under construction!") // Or use circe again to encode a POJO
response // Return the response
}
}
Iне удалось полностью протестировать этот пример, поэтому обязательно вернитесь с любыми проблемами, с которыми вы можете столкнуться.
Кстати, сообщения журнала, которые выдает ваша функция AWS Lambda, можно найти в AWS Cloudwatch.
Надеюсь, это поможет.