Skip to content

Simplest Possible AWS Lambda Function with Cloud Development Kit (CDK) Boilerplate

License

Notifications You must be signed in to change notification settings

ahndmal/aws-lambda-cdk-plain

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simplest Possible AWS Lambda Function with Cloud Development Kit (CDK) Boilerplate

A lean starting point for building, testing and deploying AWS Lambdas with Java.

TL;DR

A simple Java AWS Lambda without any AWS dependencies:

public class Greetings{

    public String onEvent(Map<String, String> input) {
        System.out.println("received: " + input);
        return input
        .entrySet()
        .stream()
        .map(e -> e.getKey() + "->" + e.getValue())
        .collect(Collectors.joining(","));
    }
    
}

...deployed with AWS Cloud Development Kit:

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) //https://aws.amazon.com/corretto
            .code(Code.fromAsset("../target/function.jar"))
            .handler(functionHandler)
            .memorySize(memory)
            .functionName(functionName)
            .timeout(Duration.seconds(timeout))
            .build();
}

...provisioned with maven and cdk:

mvn clean package
cd cdk && mvn clean package && cdk deploy

...and (blackbox) 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);
}    

In Action

Plain Java POJOs as AWS Lambdas

Java "vs." JavaScript

Cold and "warm" starts of JavaScript and Java Lambdas:

Java vs. JavaScript comparison

AWS Lambda on Java: How Good / Bad Is The Cold Start?

Coldstart with Java

Lambda Configuration

AWS Lambda Configuration with Java CDK

References

The deployment is borrowed from: "Slightly Streamlined AWS Cloud Development Kit (CDK) Boilerplate"

About

Simplest Possible AWS Lambda Function with Cloud Development Kit (CDK) Boilerplate

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 94.2%
  • Shell 5.8%