#java #scala #aws-lambda #aws-sdk #serverless
Вопрос:
Я пытаюсь развернуть единственную функцию lambda на AWS в scala с помощью SAM-CLI.
Это работает нормально, но когда я добавляю зависимость в свою сборку.sbt
"com.amazonaws" % "aws-java-sdk" % "1.11.46"
Сбой развертывания и возврат
"Unzipped size must be smaller than 262144000 bytes (Service: Lambda, Status Code: 400, Request ID: 53eeb ab6-9377-4a37-b20b-9e55ccbebd72, Extended Request ID: null)"
Моя функция заключается в
def handle(request: APIGatewayProxyRequestEvent, context: Context): Response = { println("handling %s %s, remaining time is %d ms".format( request.getHttpMethod, request.getPath, context.getRemainingTimeInMillis) ) println(s"""environment = ${sys.env.getOrElse("env", "n/a")}""") val name = request.getPathParameters.get("name") Response(s"Hello, $namen", Map("Content-Type" -gt; "text/plain")) } case class Response(body: String, headers: Map[String,String], statusCode: Int = 200) { def javaHeaders: java.util.Map[String, String] = headers.asJava `enter code here`}
И мой шаблон.yaml выглядит так
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: gt;- A SAM CLI template for a single-endpoint Hello World Lambda function in Scala Resources: HelloScalaFunction: Type: AWS::Serverless::Function Properties: FunctionName: HelloScala Description: A simple AWS Lambda function in Scala Runtime: java8 Handler: lambda.ApiGatewayProxyHandler CodeUri: target/scala-2.12/hello-scala.jar MemorySize: 512 Timeout: 15 Environment: Variables: env: staging Events: Hello: Type: Api Properties: Path: /hello/{name} Method: GET Outputs: ApiURL: Description: "API endpoint URL for Prod environment" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/{name}"
Кто-нибудь когда-нибудь испытывал нечто подобное? Как бы вы решили эту проблему?
Комментарии:
1. Вам действительно не следует добавлять весь пакет SDK AWS в свою функцию lambda. Добавьте библиотеку только для тех служб, которые вам нужны. Например, если вам нужно подключиться к базе данных DynamoDB, добавьте только службу DynamoDB. То же самое относится ко всем сервисам AWS — у каждого сервиса есть своя собственная библиотека