public class ReadStudentLambda {
private final AmazonS3 amazonS3 =
AmazonS3ClientBuilder.defaultClient();
private final ObjectMapper objectMapper = new ObjectMapper();
private final AmazonSNS amazonSNS =
AmazonSNSClientBuilder.defaultClient();
public void handler(S3Event s3Event) {
Logger logger = LoggerFactory.getLogger(ReadStudentLambda.class);
s3Event.getRecords().forEach(record -> {
S3ObjectInputStream s3ObjectInputStream = amazonS3
.getObject(record.getS3().getBucket().getName(),
record.getS3().getObject().getKey())
.getObjectContent();
try {
List<Student> students =
Arrays.asList(objectMapper.readValue(s3ObjectInputStream, Student[].class));
logger.info(students.toString());
students.forEach(student -> {
student.calculateGradeFromScore();
try {
amazonSNS.publish(System.getenv("PATIENT_CHECKOUT_TOPIC"),
objectMapper.writeValueAsString(student));
} catch (JsonProcessingException e) {
logger.error(e.getMessage(), e);
throw new RuntimeException(e);
}
});
} catch (IOException e) {
logger.error(e.getMessage(), e);
throw new RuntimeException(e);
}
});
}
public class ErrorHandler {
public void handler(SNSEvent snsEvent, Context context) {
LambdaLogger logger = context.getLogger();
snsEvent.getRecords().forEach(record -> {
logger.log("Dead Letter Queue Event: " + record.getSNS().getMessage());
});
}
}