All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.aws.lambda.events.s3.S3ObjectLambdaEvent Maven / Gradle / Ivy

package io.aws.lambda.events.s3;

import lombok.Data;
import lombok.experimental.Accessors;
import org.jetbrains.annotations.NotNull;

import java.util.Collections;
import java.util.Map;

/**
 * Event to allow transformations to occur before an S3 object is returned to
 * the calling service.
 *
 * Documentation
 *
 * Writing
 * and debugging Lambda functions for S3 Object Lambda Access Points
 *
 * Example:
 *
 * 
 * import com.amazonaws.services.lambda.runtime.Context;
 * import com.amazonaws.services.lambda.runtime.events.S3ObjectLambdaEvent;
 * import org.apache.http.client.fluent.Request;
 * import software.amazon.awssdk.services.s3.S3Client;
 * import software.amazon.awssdk.services.s3.model.WriteGetObjectResponseRequest;
 *
 * import java.io.IOException;
 *
 * import static software.amazon.awssdk.core.sync.RequestBody.fromString;
 *
 * public class S3ObjectRequestHandler {
 *
 *      private static final S3Client s3Client = S3Client.create();
 *
 *      public void handleRequest(S3ObjectLambdaEvent event, Context context) throws IOException {
 *          String s3Body = Request.Get(event.inputS3Url()).execute().returnContent().asString();
 *
 *          String responseBody = s3Body.toUpperCase();
 *
 *          WriteGetObjectResponseRequest request = WriteGetObjectResponseRequest.builder()
 *              .requestRoute(event.outputRoute())
 *              .requestToken(event.outputToken())
 *              .build();
 *          s3Client.writeGetObjectResponse(request, fromString(responseBody));
 *      }
 * }
 * 
 * 
*/ @Data @Accessors(chain = true) public class S3ObjectLambdaEvent { private String xAmzRequestId; private GetObjectContext getObjectContext; private Configuration configuration; private UserRequest userRequest; private UserIdentity userIdentity; private String protocolVersion; /** * A pre-signed URL that can be used to fetch the original object from Amazon * S3. * * The URL is signed using the original caller's identity, and their permissions * will apply when the URL is used. If there are signed headers in the URL, the * Lambda function must include these in the call to Amazon S3, except for the * Host. * * @return A pre-signed URL that can be used to fetch the original object from * Amazon S3. */ public String inputS3Url() { return getGetObjectContext().getInputS3Url(); } /** * A routing token that is added to the S3 Object Lambda URL when the Lambda * function calls the S3 API WriteGetObjectResponse. * * @return the outputRoute */ public String outputRoute() { return getGetObjectContext().getOutputRoute(); } /** * An opaque token used by S3 Object Lambda to match the WriteGetObjectResponse * call with the original caller. * * @return the outputToken */ public String outputToken() { return getGetObjectContext().getOutputToken(); } @Data @Accessors(chain = true) public static class GetObjectContext { private String inputS3Url; private String outputRoute; private String outputToken; } @Data @Accessors(chain = true) public static class Configuration { private String accessPointArn; private String supportingAccessPointArn; private String payload; } @Data @Accessors(chain = true) public static class UserRequest { private String url; private Map headers; public @NotNull Map getHeaders() { return headers == null ? Collections.emptyMap() : headers; } } @Data @Accessors(chain = true) public static class UserIdentity { private String type; private String principalId; private String arn; private String accountId; private String accessKeyId; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy