Skip to content

Commit 0cf1ca7

Browse files
committed
Change blank-java example to GetAccountSettings sample call.
- This new blank-java example initializes a Lambda client and calls GetAccountSettings - The example prints out (logs) total code size in your account and returns 200 status - Tested the scripts and ensured they still work - Verified that logs show up in CloudWatch as expected
1 parent 83f900c commit 0cf1ca7

File tree

6 files changed

+67
-148
lines changed

6 files changed

+67
-148
lines changed

sample-apps/blank-java/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ dependencies {
1616
implementation 'com.amazonaws:aws-xray-recorder-sdk-aws-sdk-v2-instrumentor'
1717
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
1818
implementation 'com.amazonaws:aws-lambda-java-events:2.2.9'
19-
implementation 'com.google.code.gson:gson:2.8.6'
19+
implementation 'com.fasterxml.jackson.core:jackson-databind:[2.14.0,)'
2020
implementation 'org.apache.logging.log4j:log4j-api:[2.17.1,)'
2121
implementation 'org.apache.logging.log4j:log4j-core:[2.17.1,)'
2222
runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)'

sample-apps/blank-java/event.json

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
11
{
2-
"Records": [
3-
{
4-
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
5-
"receiptHandle": "MessageReceiptHandle",
6-
"body": "Hello from SQS!",
7-
"attributes": {
8-
"ApproximateReceiveCount": "1",
9-
"SentTimestamp": "1523232000000",
10-
"SenderId": "123456789012",
11-
"ApproximateFirstReceiveTimestamp": "1523232000001"
12-
},
13-
"messageAttributes": {},
14-
"md5OfBody": "7b270e59b47ff90a553787216d55d91d",
15-
"eventSource": "aws:sqs",
16-
"eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:MyQueue",
17-
"awsRegion": "us-west-2"
18-
}
19-
]
2+
"key1": "value1",
3+
"key2": "value2",
4+
"key3": "value3"
205
}

sample-apps/blank-java/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
<version>1.5.0</version>
2929
</dependency>
3030
<dependency>
31-
<groupId>com.google.code.gson</groupId>
32-
<artifactId>gson</artifactId>
33-
<version>2.8.6</version>
31+
<groupId>com.fasterxml.jackson.core</groupId>
32+
<artifactId>jackson-databind</artifactId>
33+
<version>[2.14.0,)</version>
3434
</dependency>
3535
<dependency>
3636
<groupId>org.apache.logging.log4j</groupId>
Lines changed: 32 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,44 @@
11
package example;
22

33
import com.amazonaws.services.lambda.runtime.Context;
4-
import com.amazonaws.services.lambda.runtime.LambdaLogger;
54
import com.amazonaws.services.lambda.runtime.RequestHandler;
6-
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
7-
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
85

9-
import software.amazon.awssdk.services.lambda.model.GetAccountSettingsRequest;
10-
import software.amazon.awssdk.services.lambda.model.GetAccountSettingsResponse;
11-
import software.amazon.awssdk.services.lambda.model.ServiceException;
12-
import software.amazon.awssdk.services.lambda.LambdaAsyncClient;
13-
import software.amazon.awssdk.services.lambda.model.AccountUsage;
14-
15-
import com.google.gson.Gson;
16-
import com.google.gson.GsonBuilder;
6+
import java.util.Map;
177

188
import org.slf4j.Logger;
199
import org.slf4j.LoggerFactory;
2010

21-
import java.lang.StringBuilder;
22-
import java.util.Map;
23-
import java.util.List;
24-
import java.util.concurrent.CompletableFuture;
11+
import software.amazon.awssdk.regions.Region;
12+
import software.amazon.awssdk.services.lambda.LambdaClient;
13+
import software.amazon.awssdk.services.lambda.model.GetAccountSettingsResponse;
14+
import software.amazon.awssdk.services.lambda.model.LambdaException;
2515

2616
// Handler value: example.Handler
27-
public class Handler implements RequestHandler<SQSEvent, String>{
28-
private static final Logger logger = LoggerFactory.getLogger(Handler.class);
29-
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
30-
private static final LambdaAsyncClient lambdaClient = LambdaAsyncClient.create();
31-
public Handler(){
32-
CompletableFuture<GetAccountSettingsResponse> accountSettings = lambdaClient.getAccountSettings(GetAccountSettingsRequest.builder().build());
33-
try {
34-
GetAccountSettingsResponse settings = accountSettings.get();
35-
} catch(Exception e) {
36-
e.getStackTrace();
37-
}
38-
}
39-
@Override
40-
public String handleRequest(SQSEvent event, Context context)
41-
{
42-
String response = new String();
43-
// call Lambda API
44-
logger.info("Getting account settings");
45-
CompletableFuture<GetAccountSettingsResponse> accountSettings =
46-
lambdaClient.getAccountSettings(GetAccountSettingsRequest.builder().build());
47-
// log execution details
48-
logger.info("ENVIRONMENT VARIABLES: {}", gson.toJson(System.getenv()));
49-
logger.info("CONTEXT: {}", gson.toJson(context));
50-
logger.info("EVENT: {}", gson.toJson(event));
51-
// process event
52-
for(SQSMessage msg : event.getRecords()){
53-
logger.info(msg.getBody());
54-
}
55-
// process Lambda API response
56-
try {
57-
GetAccountSettingsResponse settings = accountSettings.get();
58-
response = gson.toJson(settings.accountUsage());
59-
logger.info("Account usage: {}", response);
60-
} catch(Exception e) {
61-
e.getStackTrace();
17+
public class Handler implements RequestHandler<Map<String,String>, String> {
18+
19+
private static final Logger logger = LoggerFactory.getLogger(Handler.class);
20+
private static final Region region = Region.US_EAST_1;
21+
private static final LambdaClient awsLambda = LambdaClient.builder()
22+
.region(region)
23+
.build();
24+
25+
@Override
26+
public String handleRequest(Map<String,String> event, Context context) {
27+
28+
// log execution details
29+
logger.info("ENVIRONMENT VARIABLES: " + System.getenv());
30+
logger.info("EVENT: " + event);
31+
logger.info("CONTEXT: " + context);
32+
33+
// process event
34+
GetAccountSettingsResponse response;
35+
try {
36+
response = awsLambda.getAccountSettings();
37+
System.out.println("Total code size for your account is " + response.accountLimit().totalCodeSize() + " bytes");
38+
} catch(LambdaException e) {
39+
System.err.println(e.getMessage());
40+
System.exit(1);
41+
}
42+
return "200 OK";
6243
}
63-
return response;
64-
}
65-
}
44+
}

sample-apps/blank-java/src/test/java/example/InvokeTest.java

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,16 @@
11
package example;
22

3-
import static org.junit.jupiter.api.Assertions.assertEquals;
43
import static org.junit.jupiter.api.Assertions.assertTrue;
54
import org.junit.jupiter.api.Test;
65

76
import com.amazonaws.services.lambda.runtime.Context;
8-
import com.amazonaws.services.lambda.runtime.LambdaLogger;
9-
import com.amazonaws.services.lambda.runtime.RequestHandler;
10-
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
11-
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
7+
import com.fasterxml.jackson.databind.JsonMappingException;
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
import com.fasterxml.jackson.core.JsonProcessingException;
10+
import com.fasterxml.jackson.core.type.TypeReference;
1211

13-
import com.google.gson.Gson;
14-
import com.google.gson.GsonBuilder;
15-
16-
import org.slf4j.Logger;
17-
import org.slf4j.LoggerFactory;
18-
19-
import java.util.List;
20-
import java.util.ArrayList;
12+
import java.util.HashMap;
13+
import java.util.Map;
2114
import java.io.IOException;
2215
import java.nio.charset.StandardCharsets;
2316
import java.nio.file.Files;
@@ -29,30 +22,34 @@
2922
import com.amazonaws.xray.strategy.sampling.NoSamplingStrategy;
3023

3124
class InvokeTest {
32-
private static final Logger logger = LoggerFactory.getLogger(InvokeTest.class);
33-
Gson gson = new GsonBuilder()
34-
.registerTypeAdapter(SQSEvent.class, new SQSEventDeserializer())
35-
.setPrettyPrinting()
36-
.create();
3725

3826
public InvokeTest() {
39-
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard();
40-
builder.withSamplingStrategy(new NoSamplingStrategy());
41-
AWSXRay.setGlobalRecorder(builder.build());
27+
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard();
28+
builder.withSamplingStrategy(new NoSamplingStrategy());
29+
AWSXRay.setGlobalRecorder(builder.build());
4230
}
4331

4432
@Test
4533
void invokeTest() {
46-
AWSXRay.beginSegment("blank-java-test");
47-
String path = "src/test/resources/event.json";
48-
String eventString = loadJsonFile(path);
49-
SQSEvent event = gson.fromJson(eventString, SQSEvent.class);
50-
Context context = new TestContext();
51-
String requestId = context.getAwsRequestId();
52-
Handler handler = new Handler();
53-
String result = handler.handleRequest(event, context);
54-
assertTrue(result.contains("totalCodeSize"));
55-
AWSXRay.endSegment();
34+
AWSXRay.beginSegment("blank-java-test");
35+
String path = "src/test/resources/event.json";
36+
String eventString = loadJsonFile(path);
37+
38+
ObjectMapper mapper = new ObjectMapper();
39+
TypeReference<HashMap<String, String>> typeRef = new TypeReference<HashMap<String, String>>() {};
40+
Map<String, String> event = new HashMap<>();
41+
try {
42+
event = mapper.readValue(eventString, typeRef);
43+
} catch (JsonMappingException e) {
44+
e.printStackTrace();
45+
} catch (JsonProcessingException e) {
46+
e.printStackTrace();
47+
}
48+
Context context = new TestContext();
49+
Handler handler = new Handler();
50+
String result = handler.handleRequest(event, context);
51+
assertTrue(result.contains("200 OK"));
52+
AWSXRay.endSegment();
5653
}
5754

5855
private static String loadJsonFile(String path)

sample-apps/blank-java/src/test/java/example/SQSEventDeserializer.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)