Skip to content

Commit 0d6e155

Browse files
author
AntoniaSzecsi
committed
Add local testing support with RIE
1 parent e54cf69 commit 0d6e155

File tree

4 files changed

+90
-1
lines changed

4 files changed

+90
-1
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
FROM public.ecr.aws/amazoncorretto/amazoncorretto:11
2+
3+
# Install RIE
4+
RUN yum update -y && \
5+
yum install -y curl && \
6+
curl -Lo /usr/local/bin/aws-lambda-rie \
7+
https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \
8+
chmod +x /usr/local/bin/aws-lambda-rie
9+
10+
WORKDIR /function
11+
12+
COPY target/aws-lambda-java-runtime-interface-client-*.jar ./
13+
COPY target/aws-lambda-java-core-*.jar ./
14+
COPY target/aws-lambda-java-serialization-*.jar ./
15+
16+
COPY test-handlers/EchoHandler.class ./
17+
18+
# Run RIE which will launch the Java RIC
19+
ENTRYPOINT ["/usr/local/bin/aws-lambda-rie", "/usr/bin/java", "-cp", "./*", "com.amazonaws.services.lambda.runtime.api.client.AWSLambda"]
20+
21+
# Default handler can be overridden by passing a new one on `docker run`
22+
CMD ["EchoHandler::handleRequest"]

aws-lambda-java-runtime-interface-client/Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ publish:
6565
test-publish:
6666
./ric-dev-environment/test-platform-specific-jar-snapshot.sh
6767

68+
.PHONY: test-rie
69+
test-rie:
70+
./scripts/test-rie.sh "EchoHandler::handleRequest"
71+
6872
define HELP_MESSAGE
6973

7074
Usage: $ make [TARGETS]
@@ -74,5 +78,5 @@ TARGETS
7478
dev Run all development tests after a change.
7579
pr Perform all checks before submitting a Pull Request.
7680
test Run the Unit tests.
77-
81+
test-rie Build and test RIC locally with Lambda Runtime Interface Emulator. (Requires building the project first)
7882
endef
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
6+
SERIALIZATION_ROOT="$(dirname "$PROJECT_ROOT")/aws-lambda-java-serialization"
7+
8+
if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-runtime-interface-client-*.jar >/dev/null 2>&1; then
9+
echo "RIC jar not found. Please build the project first with 'mvn package'."
10+
exit 1
11+
fi
12+
13+
IMAGE_TAG="java-ric-rie-test"
14+
15+
HANDLER="${1:-EchoHandler::handleRequest}"
16+
17+
echo "Starting RIE test setup for Java..."
18+
19+
# Download required dependencies if not present
20+
if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-core-*.jar >/dev/null 2>&1; then
21+
echo "Downloading aws-lambda-java-core..."
22+
(cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-core:1.3.0 -DoutputDirectory=target)
23+
fi
24+
25+
if ! ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar >/dev/null 2>&1; then
26+
echo "Downloading aws-lambda-java-serialization..."
27+
(cd "$PROJECT_ROOT" && mvn dependency:copy -Dartifact=com.amazonaws:aws-lambda-java-serialization:1.1.6 -DoutputDirectory=target)
28+
fi
29+
30+
echo "Compiling EchoHandler..."
31+
javac -source 11 -target 11 -cp "$(ls "$PROJECT_ROOT"/target/aws-lambda-java-runtime-interface-client-*.jar):$(ls "$PROJECT_ROOT"/target/aws-lambda-java-core-*.jar):$(ls "$PROJECT_ROOT"/target/aws-lambda-java-serialization-*.jar)" \
32+
-d "$PROJECT_ROOT/test-handlers/" "$PROJECT_ROOT/test-handlers/EchoHandler.java"
33+
34+
echo "Building test Docker image..."
35+
docker build -t "$IMAGE_TAG" -f "$PROJECT_ROOT/Dockerfile.rie" "$PROJECT_ROOT"
36+
37+
echo "Starting test container on port 9000..."
38+
echo ""
39+
echo "In another terminal, invoke with:"
40+
echo "curl -s -X POST -H 'Content-Type: application/json' \"http://localhost:9000/2015-03-31/functions/function/invocations\" -d '{\"message\":\"test\"}'"
41+
echo ""
42+
43+
exec docker run -it -p 9000:8080 "$IMAGE_TAG" "$HANDLER"
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import com.amazonaws.services.lambda.runtime.Context;
2+
import com.amazonaws.services.lambda.runtime.RequestHandler;
3+
import java.util.Map;
4+
import java.util.HashMap;
5+
6+
public class EchoHandler implements RequestHandler<Map<String, Object>, Map<String, Object>> {
7+
8+
@Override
9+
public Map<String, Object> handleRequest(Map<String, Object> event, Context context) {
10+
context.getLogger().log("Processing event: " + event);
11+
12+
Map<String, Object> response = new HashMap<>(event);
13+
response.put("timestamp", System.currentTimeMillis());
14+
response.put("requestId", context.getAwsRequestId());
15+
response.put("functionName", context.getFunctionName());
16+
response.put("remainingTimeInMillis", context.getRemainingTimeInMillis());
17+
18+
return response;
19+
}
20+
}

0 commit comments

Comments
 (0)