Skip to content

Commit e932d10

Browse files
author
Jason Harris
committed
Refactoring stream function to process input logging example with a Lambda Function URL instead of APIGW.
1 parent 7d11fac commit e932d10

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

examples/powertools-examples-core/sam/src/main/java/helloworld/AppStream.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,47 @@
1717
import com.amazonaws.services.lambda.runtime.Context;
1818
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
1919
import com.fasterxml.jackson.databind.ObjectMapper;
20+
2021
import java.io.IOException;
2122
import java.io.InputStream;
2223
import java.io.OutputStream;
2324
import java.util.Map;
25+
26+
import org.apache.logging.log4j.LogManager;
27+
import org.apache.logging.log4j.Logger;
2428
import software.amazon.lambda.powertools.logging.Logging;
2529
import software.amazon.lambda.powertools.metrics.Metrics;
2630

31+
import java.io.InputStreamReader;
32+
import java.io.BufferedReader;
33+
import java.io.BufferedWriter;
34+
import java.io.OutputStreamWriter;
35+
import java.io.PrintWriter;
36+
import java.nio.charset.Charset;
37+
2738
public class AppStream implements RequestStreamHandler {
2839
private static final ObjectMapper mapper = new ObjectMapper();
40+
private final static Logger log = LogManager.getLogger(AppStream.class);
2941

3042
@Override
3143
@Logging(logEvent = true)
3244
@Metrics(namespace = "ServerlessAirline", service = "payment", captureColdStart = true)
3345
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
34-
Map map = mapper.readValue(input, Map.class);
35-
36-
System.out.println(map.size());
46+
BufferedReader reader = new BufferedReader(new InputStreamReader(input, Charset.forName("US-ASCII")));
47+
PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(output, Charset.forName("US-ASCII"))));
48+
int nextChar;
49+
try {
50+
while ((nextChar = reader.read()) != -1) {
51+
output.write(nextChar);
52+
}
53+
} catch (IOException e) {
54+
log.error("Something has gone wrong: ", e);
55+
} finally {
56+
reader.close();
57+
String finalString = writer.toString();
58+
log.info("Final string result: " + finalString);
59+
writer.close();
60+
}
3761
}
3862
}
63+

examples/powertools-examples-core/sam/template.yaml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@ Resources:
4444
Environment:
4545
Variables:
4646
POWERTOOLS_LOGGER_SAMPLE_RATE: 0.7
47-
Events:
48-
HelloWorld:
49-
Type: Api
50-
Properties:
51-
Path: /hellostream
52-
Method: get
47+
48+
HelloWorldStreamFunctionUrl:
49+
Type: AWS::Lambda::Url
50+
Properties:
51+
TargetFunctionArn: !Ref HelloWorldStreamFunction
52+
AuthType: AWS_IAM
53+
InvokeMode: RESPONSE_STREAM
5354

5455
Outputs:
5556
# ServerlessRestApi is an implicit API created out of Events key under Serverless::Function

0 commit comments

Comments
 (0)