AWS Lambda as Java POJOs-Deployed with Java CDK 📎
public class Greetings{
public String onEvent(Map input) {
//...
}
}
...with primitive datatypes, collections or streams as input parameters. The return value is serialized into a String for primitive types or JSON for classes.
A selected public method becomes the function handler. In the example above it is the method: onEvent
An AWS Lambda can be deployed with AWS CDK in Java:
import software.amazon.awscdk.services.lambda.Code;
import software.amazon.awscdk.services.lambda.Function;
import software.amazon.awscdk.services.lambda.Runtime;
//...
Function createUserListenerFunction(String functionName,String functionHandler, int memory, int timeout) {
return Function.Builder.create(this, id(functionName))
.runtime(Runtime.JAVA_11)
.code(Code.fromAsset("../target/function.jar"))
.handler(functionHandler)
.memorySize(memory)
.functionName(functionName)
.timeout(Duration.seconds(timeout))
.build();
}
...and (blackbox) integration tested with AWS SDK for Java 2.x:
@BeforeEach
public void initClient() {
var credentials = DefaultCredentialsProvider
.builder()
.profileName("airhacks.live")
.build();
this.client = LambdaClient.builder()
.credentialsProvider(credentials)
.build();
}
@Test
public void invokeLambdaAsynchronously() {
String json = "{\"user \":\"duke\"}";
SdkBytes payload = SdkBytes.fromUtf8String(json);
InvokeRequest request = InvokeRequest.builder()
.functionName("airhacks_lambda_greetings_boundary_Greetings")
.payload(payload)
.invocationType(InvocationType.REQUEST_RESPONSE)
.build();
var response = this.client.invoke(request);
var error = response.functionError();
assertNull(error);
var value = response.payload().asUtf8String();
System.out.println("Function executed. Response: " + value);
}
See it in action:
The sample code is available as template from: https://github.com/AdamBien/aws-lambda-cdk-plain.