in TerraformCustomResourceHandler/src/main/java/com/amazon/servicecatalog/terraform/customresource/TerraformRequestHandler.java [50:82]
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
String requestString = toRequestString(inputStream);
log.trace("Original unparsed input:\n" + requestString);
SnsRecordContent recordContent;
CustomResourceRequest request;
try {
recordContent = CustomResourceMarshaller.readSnsRecordContent(requestString, false);
request = CustomResourceMarshaller.readCustomResourceRequest(recordContent, false);
} catch (RuntimeException e) {
log.error("Failed to parse request.", e);
try {
recordContent = CustomResourceMarshaller.readSnsRecordContent(requestString, true);
request = CustomResourceMarshaller.readCustomResourceRequest(recordContent, true);
ResponsePoster.postFailure(request, "Failed to parse request: " + e.getMessage());
} catch (RuntimeException ex) {
log.error("Unexpected error parsing request or posting failure response.", ex);
}
return;
}
try {
// Best-effort validation so we don't send unnecessary commands to SSM
TerraformResourceProperties properties = request.getResourceProperties();
properties.validateFields();
verifyNoCrossAccountAccess(properties, recordContent);
CustomResourceMarshaller.verifySnsSignature(recordContent);
handle(context, request);
} catch (RuntimeException e) {
ResponsePoster.postFailure(request, e.getMessage());
log.error("Unexpected error encountered when handling the request.", e);
}
}