Running lambdas locally

While developing lambdas it is quite useful to be able to run lambdas locally and see how they behave when receiving certain events. This should not be consider a replacement for writing tests - You should write tests for your code!

In order to locally invoke your lambdas you can do so by running:

$ echo '{... JSON ...}' | gordon run APP.LAMBDA

Gordon expects stdin to be the json formated event your lambda will receive. It is important to note that your lambda will be executed after collecting all resources and applying the full build process, so you can expect dependencies to be available.

Python lambdas

Python lambdas don’t require any specific setup, but you should keep in mind the limitations of of the mock LambdaContext object that gordon uses as second argument of your lambda. You can find the current implementation Python Loader.

We’ll try to make this mock more clever overtime. PR Welcome!

Node Lambdas

Node lambdas don’t require any specific setup, but you should keep in mind the limitations of of the mock LambdaContext object that gordon uses as second argument of your lambda. You can find the current implementation Node Loader.

We’ll try to make this mock more clever overtime. PR Welcome!

Java Lambdas

Java lambdas require you to write an adapter which accepts a String as the first argument and Context as second.

package example;

import com.amazonaws.services.lambda.runtime.Context;
import org.json.JSONObject;


public class Hello {

    public static class EventClass {

        ...

        public EventClass(String key1, String key2, String key3) {
            this.key1 = key1;
            this.key2 = key2;
            this.key3 = key3;
        }

    }

    public String handler(EventClass event, Context context) {
        System.out.println("value1 = " + event.key1);
        System.out.println("value2 = " + event.key2);
        System.out.println("value3 = " + event.key3);
        return String.format(event.key1);
    }

    public String handler(String json_event, Context context) {
        JSONObject event_data = new JSONObject(json_event);
        EventClass event = new EventClass(
            event_data.getString("key1"),
            event_data.getString("key2"),
            event_data.getString("key3")
        );
        return this.handler(event, context);
    }

}

As you can see we have defined an adapter with the following signature public String handler(String json_event, Context context) which calls our lambda handler after creating a EventClass instance using the data from the json in json_event.

In a similar way than Python and Javascript lambdas you should keep in mind the limitations of of the MockContext object that gordon uses as second argument of your lambda. You can find the current implementation Java Loader.

We’ll try to make this mock more clever overtime. PR Welcome!