Как создать лямбда-функцию, используя AWS SDK для Java 2.0 - PullRequest
0 голосов
/ 17 декабря 2018

Как создать функцию Lambda, используя AWS SDK для Java 2.0?Используя SDK 1.x, я могу сделать это, используя следующее:

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

Используя Java SDK 2.x, я не могу найти эквивалентные зависимости для объекта S3Event и Context?Я был бы очень признателен, если бы кто-то мог указать мне примеры.Или я должен просто придерживаться SDK 1.x, если 2.x недостаточно зрел для обработки лямбды?

1 Ответ

0 голосов
/ 18 декабря 2018

S3Event является частью библиотеки AWS Lambda Java Events , где Context является частью AWS 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");
        }
    }
}

, тогда вы сможете прочитать JSON, который находится в S3Event самостоятельно.По сути, вы выполняете сериализацию S3Event в своем коде вместо того, чтобы делать это с помощью библиотеки Amazon.

Очевидно, что самым большим недостатком является то, что вы должны сами сериализовать событие.Пример события S3 в JSON можно найти здесь .

В приведенном выше примере используется JsonPath для извлечения, в этом случае, ключей из события.Вы будете удивлены, насколько меньше ваш Lambda-код после удаления библиотеки Lambda Events.

...