如何使用AWS SDK for Java 2.0创建Lambda函数?Usinx SDK 1.x,我可以使用以下命令来实现:
public String handleRequest(S3Event s3event, Context context) {
System.out.println("do stuff");
return "success";
}
使用java SDK2.x,我似乎找不到S3Event和上下文对象的等价依赖项?如果有人能给我举个例子,我将不胜感激。或者,如果2.x对于处理lambda还不够成熟,我应该坚持使用SDK 1.x吗?
发布于 2018-12-18 06:53:17
S3Event
是AWS Lambda Java Events库的一部分,而Context
是AWS Lambda Java Core的一部分。当您包含事件库时,您确实拉入了1.x Java SDK。但是,如果您使用Lambda处理程序的Java Stream版本,则可以删除对事件库的依赖,从而消除对1.xSDK的需要。您的代码将如下所示:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.jayway.jsonpath.JsonPath;
public class S3EventLambdaHandler implements RequestStreamHandler {
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
try {
List<String> keys = JsonPath.read(inputStream, "$.Records[*].s3.object.key");
for( String nextKey: keys )
System.out.println(nextKey);
}
catch( IOException ioe ) {
context.getLogger().log("caught IOException reading input stream");
}
}
}
然后,您可以自己读取S3Event中的JSON。实际上,您是在代码中进行S3Event的序列化,而不是让Amazon库来进行序列化。
显然,最大的缺点是你必须自己序列化事件。可以在here中找到JSON中的一个示例S3事件。
上面的示例使用JsonPath从事件中提取关键字。在删除Lambda事件库之后,您会惊讶地发现Lambda代码变得如此之小。
https://stackoverflow.com/questions/53820397
复制相似问题