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.有解决方案吗
好的,我意识到我不必包括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的限制.
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |