Example usage for com.amazonaws.services.lambda.model InvokeResult getLogResult

List of usage examples for com.amazonaws.services.lambda.model InvokeResult getLogResult

Introduction

In this page you can find the example usage for com.amazonaws.services.lambda.model InvokeResult getLogResult.

Prototype


public String getLogResult() 

Source Link

Document

The last 4 KB of the execution log, which is base64 encoded.

Usage

From source file:com.nike.cerberus.operation.gateway.CreateCloudFrontSecurityGroupUpdaterLambdaOperation.java

License:Apache License

/**
 * Forces the lambda to run and sync the IPs for CloudFront to be white listed on the origin elb
 *//*from w w  w . j  av a2 s  .  co m*/
private void forceLambdaToUpdateSgs(String arn) {
    String json;
    try {
        json = IOUtils.toString(this.getClass().getClassLoader()
                .getResourceAsStream("aws-ip-space-change-sns-sample-event.json"));
    } catch (IOException e) {
        String msg = "Failed to load mock sns message, to force Lambda first run";
        logger.error(msg, e);
        throw new RuntimeException(msg, e);
    }
    // this will fail
    InvokeResult result = awsLambda.invoke(new InvokeRequest().withFunctionName(arn)
            .withPayload(String.format(json, BAD_HASH)).withLogType(LogType.Tail));
    // collect the error so we can parse it for the latest hash
    String log = new String(Base64.getDecoder().decode(result.getLogResult()), Charset.forName("UTF-8"));
    Pattern pattern = Pattern.compile("MD5 Mismatch: got\\s(.*?)\\sexp.*?");
    Matcher matcher = pattern.matcher(log);
    boolean matched = matcher.find();
    if (!matched) {
        throw new RuntimeException("failed to extract hash from: " + log);
    }

    String realHash = matcher.group(1);
    result = awsLambda.invoke(new InvokeRequest().withFunctionName(arn)
            .withPayload(String.format(json, realHash)).withLogType(LogType.Tail));

    logger.info("Forcing the Lambda to run and update Security Groups");
    logger.info(new String(result.getPayload().array(), Charset.forName("UTF-8")));
}

From source file:org.apache.nifi.processors.aws.lambda.PutLambda.java

License:Apache License

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) {

    FlowFile flowFile = session.get();//from   ww w  .j  a  v  a2  s  .  c o m
    if (flowFile == null) {
        return;
    }

    final String functionName = context.getProperty(AWS_LAMBDA_FUNCTION_NAME).getValue();

    final String qualifier = context.getProperty(AWS_LAMBDA_FUNCTION_QUALIFIER).getValue();

    // Max size of message is 6 MB
    if (flowFile.getSize() > MAX_REQUEST_SIZE) {
        getLogger().error("Max size for request body is 6mb but was {} for flow file {} for function {}",
                new Object[] { flowFile.getSize(), flowFile, functionName });
        session.transfer(flowFile, REL_FAILURE);
        return;
    }

    final AWSLambdaClient client = getClient();

    try {
        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        session.exportTo(flowFile, baos);

        InvokeRequest invokeRequest = new InvokeRequest().withFunctionName(functionName)
                .withLogType(LogType.Tail).withInvocationType(InvocationType.RequestResponse)
                .withPayload(ByteBuffer.wrap(baos.toByteArray())).withQualifier(qualifier);
        long startTime = System.nanoTime();

        InvokeResult result = client.invoke(invokeRequest);

        flowFile = session.putAttribute(flowFile, AWS_LAMBDA_RESULT_STATUS_CODE,
                result.getStatusCode().toString());

        if (!StringUtils.isBlank(result.getLogResult())) {
            flowFile = session.putAttribute(flowFile, AWS_LAMBDA_RESULT_LOG,
                    new String(Base64.decode(result.getLogResult()), Charset.defaultCharset()));
        }

        if (result.getPayload() != null) {
            flowFile = session.putAttribute(flowFile, AWS_LAMBDA_RESULT_PAYLOAD,
                    new String(result.getPayload().array(), Charset.defaultCharset()));
        }

        if (!StringUtils.isBlank(result.getFunctionError())) {
            flowFile = session.putAttribute(flowFile, AWS_LAMBDA_RESULT_FUNCTION_ERROR,
                    result.getFunctionError());
            session.transfer(flowFile, REL_FAILURE);
        } else {
            session.transfer(flowFile, REL_SUCCESS);
            final long totalTimeMillis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime);
            session.getProvenanceReporter().send(flowFile, functionName, totalTimeMillis);
        }
    } catch (final InvalidRequestContentException | InvalidParameterValueException | RequestTooLargeException
            | ResourceNotFoundException | UnsupportedMediaTypeException unrecoverableException) {
        getLogger().error("Failed to invoke lambda {} with unrecoverable exception {} for flow file {}",
                new Object[] { functionName, unrecoverableException, flowFile });
        flowFile = populateExceptionAttributes(session, flowFile, unrecoverableException);
        session.transfer(flowFile, REL_FAILURE);
    } catch (final TooManyRequestsException retryableServiceException) {
        getLogger().error(
                "Failed to invoke lambda {} with exception {} for flow file {}, therefore penalizing flowfile",
                new Object[] { functionName, retryableServiceException, flowFile });
        flowFile = populateExceptionAttributes(session, flowFile, retryableServiceException);
        flowFile = session.penalize(flowFile);
        session.transfer(flowFile, REL_FAILURE);
        context.yield();
    } catch (final AmazonServiceException unrecoverableServiceException) {
        getLogger().error("Failed to invoke lambda {} with exception {} for flow file {} sending to fail",
                new Object[] { functionName, unrecoverableServiceException, flowFile });
        flowFile = populateExceptionAttributes(session, flowFile, unrecoverableServiceException);
        session.transfer(flowFile, REL_FAILURE);
        context.yield();
    } catch (final Exception exception) {
        getLogger().error("Failed to invoke lambda {} with exception {} for flow file {}",
                new Object[] { functionName, exception, flowFile });
        session.transfer(flowFile, REL_FAILURE);
        context.yield();
    }
}