【问题标题】:How to create a Lambda function using AWS SDK for Java 2.0如何使用 AWS SDK for Java 2.0 创建 Lambda 函数
【发布时间】:2019-05-18 03:00:33
【问题描述】:

如何使用 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 SDK 2.x,我似乎找不到 S3Event 和 Context 对象的等效依赖项?如果有人能指出我的例子,我将不胜感激。或者如果 2.x 还不够成熟,无法处理 lambda,我应该坚持使用 SDK 1.x?

【问题讨论】:

  • 您是否找到了使用 SDK 2.x 处理 lambda 函数请求的任何方法?

标签: amazon-web-services aws-lambda aws-sdk


【解决方案1】:

S3EventAWS Lambda Java Events 库的一部分,其中ContextAWS Lambda Java Core 的一部分。当您包含事件库时,您确实会拉入 1.x Java SDK。但是,如果您使用 Java Stream 版本的 Lambda 处理程序,您可以删除对事件库的依赖,从而消除对 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 从事件中提取键。删除 Lambda 事件库后,您会惊讶地发现您的 Lambda 代码小了多少。

【讨论】:

  • 表示java SDK 2.x中没有使用S3Event的库。
  • 这不使用 2.0 代码。也许是早期版本? 2.0 包以“software.amazon.awssdk...”开头
  • @danorton - 目前还没有 2.0 Java Lambda 核心库。
  • @stdunbar 问题是在 2.0 SDK 的上下文中,但由于 OP 接受了 1.x 答案,我想就是这样。
猜你喜欢
  • 2015-04-13
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 2019-01-03
  • 2017-09-05
  • 2015-09-08
  • 2019-04-16
相关资源
最近更新 更多