如何使用AWS SDK for Java 2.0创建Lambda函数

7

如何使用AWS SDK for Java 2.0创建Lambda函数?在使用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?


你有找到任何处理SDK 2.x中的Lambda函数请求的方法吗? - Vadym
1个回答

6

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库完成。

显然,最大的缺点是您必须自己序列化事件。可以在此处找到一个JSON格式的示例S3事件here

上述示例使用JsonPath来提取事件中的键。在删除Lambda Events库之后,您会惊讶地发现您的Lambda代码变得更小。

编辑 - 2022年9月

有时候我知道这不太清楚,但是AWS Lambda Java核心库 没有2.0版本——即使在此帖子发布4年后仍然如此。Lambda核心库定义了像ContextRequestStreamHandler这样的内容,就像我上面的代码中显示的那样。截至目前,仍然有3个库可以用于在Java中编写Lambda的服务器端,而它们都位于com.amazonaws包中。这些不是用于作为客户端访问AWS的其余部分的库,对于这些部分,有V2版本(在software.amazon包中)的库可用。对于OP的问题,答案仍然是一样的——Java编写Lambda的服务器端不存在V2库。与AWS环境的其他部分进行交互作为客户端——当然,V2已经有一段时间了。但并非针对Lambda的“服务器”端。

AWS Lambda Java Events库现在已经更新到V3,但仍然使用com.amazonaws包。为了参考,我会在上面的代码中不使用RequestStreamHandler,因为这个事件库比4年前要轻量很多,但是包名没有改变。


这意味着在Java SDK 2.x中没有可用于使用S3Event的库。 - user2144684
4
这里没有使用2.0代码,可能是早期版本?2.0的包以"software.amazon.awssdk..."开头。 - danorton
1
@danorton - 目前还没有2.0版本的Java Lambda核心库。 - stdunbar
那不是SDKV2,而是一个SDKV1的示例,并且尚未被接受。 - yerlilbilgin
1
@AbhishekVerma - 答案仍然是一样的。AWS Lambda Java Libs Core 仍然是1.2.2版本。这允许您构建Lambda函数。要与其他AWS服务进行交互,请使用AWS SDK for Java v2。在SDK方面,您只需要一个版本。 - stdunbar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接