Skip to content

Commit 135cce8

Browse files
committed
Add a few sample Lambda request handlers useful for benchmarking
1 parent 69f1c8d commit 135cce8

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.amazonaws.services.sqs;
2+
3+
import com.amazonaws.services.lambda.runtime.Context;
4+
import com.amazonaws.services.lambda.runtime.RequestHandler;
5+
6+
/**
7+
* A Lambda that just returns its input. Useful for benchmarking purposes.
8+
*/
9+
public class IdentityFunction implements RequestHandler<String, String> {
10+
11+
@Override
12+
public String handleRequest(String input, Context context) {
13+
return input;
14+
}
15+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.amazonaws.services.sqs;
2+
3+
import java.util.Map.Entry;
4+
import java.util.stream.Collectors;
5+
6+
import com.amazonaws.services.lambda.runtime.Context;
7+
import com.amazonaws.services.lambda.runtime.RequestHandler;
8+
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
9+
import com.amazonaws.services.lambda.runtime.events.SQSEvent.MessageAttribute;
10+
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
11+
import com.amazonaws.services.sqs.model.MessageAttributeValue;
12+
13+
/**
14+
* An SQS-triggered Lambda function that just returns the body of the
15+
* SQS message. If the message is a request sent by a Requester client,
16+
* it sends the response through SQS as well.
17+
*/
18+
public class SQSIdentityFunction implements RequestHandler<SQSEvent, String> {
19+
20+
private static final AmazonSQSResponder sqs =
21+
AmazonSQSResponderClientBuilder.defaultClient();
22+
23+
@Override
24+
public String handleRequest(SQSEvent input, Context context) {
25+
SQSMessage message = input.getRecords().get(0);
26+
String messageBody = message.getBody();
27+
28+
MessageContent requestMessage = new MessageContent(messageBody,
29+
message.getMessageAttributes().entrySet().stream().collect(
30+
Collectors.toMap(Entry::getKey, e -> toMessageAttributeValue(e.getValue()))));
31+
if (sqs.isResponseMessageRequested(requestMessage)) {
32+
MessageContent response = new MessageContent(messageBody);
33+
sqs.sendResponseMessage(requestMessage, response);
34+
}
35+
return messageBody;
36+
}
37+
38+
private MessageAttributeValue toMessageAttributeValue(MessageAttribute attribute) {
39+
return new MessageAttributeValue().withDataType(attribute.getDataType())
40+
.withStringValue(attribute.getStringValue())
41+
.withStringListValues(attribute.getStringListValues())
42+
.withBinaryValue(attribute.getBinaryValue())
43+
.withBinaryListValues(attribute.getBinaryListValues());
44+
}
45+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.amazonaws.services.sqs;
2+
3+
import java.util.concurrent.TimeUnit;
4+
import java.util.concurrent.TimeoutException;
5+
6+
import com.amazonaws.services.lambda.runtime.Context;
7+
import com.amazonaws.services.lambda.runtime.RequestHandler;
8+
import com.amazonaws.services.sqs.model.Message;
9+
import com.amazonaws.services.sqs.model.SendMessageRequest;
10+
11+
/**
12+
* A Lambda that invokes the SQSIdentityFunction using the SQS request client.
13+
*/
14+
public class SQSIdentityFunctionRequester implements RequestHandler<String, String> {
15+
16+
private static final AmazonSQSRequester requester = AmazonSQSRequesterClientBuilder.defaultClient();
17+
18+
private static final String SQS_IDENTITY_FUNCTION_QUEUE_URL = System.getenv("SQS_IDENTITY_FUNCTION_QUEUE_URL");
19+
20+
@Override
21+
public String handleRequest(String input, Context context) {
22+
SendMessageRequest sendRequest = new SendMessageRequest()
23+
.withQueueUrl(SQS_IDENTITY_FUNCTION_QUEUE_URL)
24+
.withMessageBody(input);
25+
try {
26+
Message response = requester.sendMessageAndGetResponse(sendRequest, 30, TimeUnit.SECONDS);
27+
String result = response.getBody();
28+
if (!input.equals(result)) {
29+
throw new RuntimeException("Incorrect result: " + result);
30+
}
31+
return result;
32+
} catch (TimeoutException e) {
33+
throw new RuntimeException(e);
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)