如何使用适用于Java 2.0的AWS开发工具包创建Lambda函数? Usinx SDK 1.x,可以使用以下方法进行操作:

public String handleRequest(S3Event s3event, Context context) {
System.out.println("do stuff");
return "success";
}

使用Java SDK 2.x,我似乎找不到S3Event和Context对象的等效依赖项?如果有人可以向我指出示例,我将不胜感激。还是如果2.x还不够成熟,无法处理lambda,我应该坚持使用SDK 1.x吗?

最佳答案

S3EventAWS Lambda Java Events库的一部分,其中ContextAWS Lambda Java Core的一部分。当包含事件库时,您确实要引入1.x Java SDK。但是,如果使用Lambda处理程序的Java Stream版本,则可以删除对事件库的依赖关系,从而不需要1.x SDK。您的代码如下所示:

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在这种情况下从事件中提取 key 。删除Lambda事件库后,您会惊奇地发现Lambda代码要小得多。

关于amazon-web-services - 如何使用适用于Java 2.0的AWS开发工具包创建Lambda函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53820397/

10-16 22:37