如何使用适用于 Java 2.0 的 AWS 开发工具包创建 Lambda 函数

How to create a Lambda function using AWS SDK for Java 2.0

如何使用适用于 Java 2.0 的 AWS SDK 创建 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 吗?

S3Event 是 Lambda 处理程序 AWS Lambda Java Events library where Context is part of the AWS Lambda Java Core. When you include the events library you do pull in the 1.x Java SDK. However, if you use the 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 库执行它。

显然最大的缺点是你必须自己序列化事件。 JSON 中的示例 S3 事件可以在 here.

中找到

以上示例使用 JsonPath 从事件中提取密钥。删除 Lambda 事件库后,您会惊讶地发现您的 Lambda 代码变得如此之小。