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.