错误:scalac:找不到类com.amazonaws.services.s3.event.S3EventNotification - 继续存根

Yuc*_*ong 3 amazon-web-services aws-lambda

我试图用aws lambda处理S3事件.以下是build.sbt文件,该文件是在Scala中编写AWS Lambda函数时修改的:

javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint")

lazy val root = (project in file(".")).
  settings(
    name := "lambda-demo",
    version := "1.0",
    scalaVersion := "2.11.4",
    retrieveManaged := true
  )

libraryDependencies ++= Seq(
  "com.amazonaws" % "aws-lambda-java-core" % "1.1.0",
  "com.amazonaws" % "aws-lambda-java-events" % "1.0.0"
)

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs@_*) => MergeStrategy.discard
  case x => MergeStrategy.first
}
Run Code Online (Sandbox Code Playgroud)

简单的Main.scala:

package example;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.S3Event

class Main {
  def myHandler(event: S3Event, context: Context): String = s"Hello $event"
}
Run Code Online (Sandbox Code Playgroud)

它无法使用以下代码进行编译:

错误:scalac:未找到类com.amazonaws.services.s3.event.S3EventNotification - 继续存根.

它似乎缺少依赖项,我添加了aws-java-sdk:

libraryDependencies ++= Seq(
  "com.amazonaws" % "aws-java-sdk" % "1.11.179",
  "com.amazonaws" % "aws-lambda-java-core" % "1.1.0",
  "com.amazonaws" % "aws-lambda-java-events" % "1.0.0"
)
Run Code Online (Sandbox Code Playgroud)

它编译得很好!! 但后来我意识到包大小是79MB,这超过了lambda函数的硬限制:50MB.有解决方案吗

Yuc*_*ong 5

好的,我意识到我不必包括aws-java-sdk.我唯一需要的是s3相关部分.将依赖项更改为以下后,它可以正常工作.

libraryDependencies ++= Seq(
  "com.amazonaws" % "aws-java-sdk-s3" % "1.11.179",
  "com.amazonaws" % "aws-lambda-java-core" % "1.1.0",
  "com.amazonaws" % "aws-lambda-java-events" % "1.0.0"
)
Run Code Online (Sandbox Code Playgroud)

最终的封装尺寸仅为11.8MB,小于50MB的限制.