AWS API Gateway позволяет передавать такую информацию, как метод HTTP, путь запроса, заголовки и т. д., в AWS Lambda с помощью Интеграция Lambda Proxy.
После успешной настройки включите библиотеки aws-lambda-java- core и aws-lambda-java-events в свой проект.
В СБТ:
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-lambda-java-core" % "1.2.0",
"com.amazonaws" % "aws-lambda-java-events" % "2.2.3"
)
Это официальные библиотеки от AWS для разработки функций AWS Lambda в Java/Scala.
Кроме того, вам понадобится библиотека обработки JSON, например circe.
В СБТ:
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
}
}
Я не смог полностью протестировать этот пример, поэтому обязательно вернитесь с любыми проблемами, с которыми вы можете столкнуться.
Кстати, сообщения журнала, которые будет создавать ваша функция AWS Lambda, можно найти в AWS Cloudwatch.
Надеюсь, это поможет.
person
Markus Appel
schedule
03.12.2018