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

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

Introduction

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

Prototype


public String getFunctionError() 

Source Link

Document

If present, indicates that an error occurred during function execution.

Usage

From source file:br.com.ingenieux.mojo.beanstalk.bundle.CodeCommitFastDeployMojo.java

License:Apache License

@Override
protected String lookupVersionLabelForCommitId(String commitId) throws Exception {
    String s3Bucket = getService().createStorageLocation().getS3Bucket();

    ObjectNode payload = objectMapper.createObjectNode();

    payload.put("applicationName", applicationName);

    payload.put("commitId", commitId);

    payload.put("repoName", repoName);

    payload.put("description", versionDescription);

    payload.put("accessKey", getAWSCredentials().getCredentials().getAWSAccessKeyId());

    payload.put("secretKey", getAWSCredentials().getCredentials().getAWSSecretKey());

    payload.put("region", getRegion().getName());

    payload.put("targetPath",
            format("s3://%s/apps/%s/versions/git-%s.zip", s3Bucket, applicationName, commitId));

    AWSLambda lambda = getClientFactory().getService(AWSLambdaClient.class);

    final String payloadAsString = objectMapper.writeValueAsString(payload);

    getLog().info("Calling beanstalk-codecommit-deployer with arguments set to: " + redact(payloadAsString));

    final InvokeResult invoke = lambda.invoke(new InvokeRequest()
            .withFunctionName("beanstalker-codecommit-deployer").withPayload(payloadAsString));

    String resultAsString = new String(invoke.getPayload().array(), "utf-8");

    if (isNotBlank(invoke.getFunctionError())) {
        final String errorMessage = "Unexpected: " + invoke.getFunctionError();

        getLog().info(errorMessage);/*ww w.  j a  v a  2 s . c  o  m*/

        throw new RuntimeException(errorMessage);
    } else {
        List<String> messages = objectMapper.readValue(resultAsString, new TypeReference<List<String>>() {
        });

        for (String m : messages) {
            getLog().info(m);
        }
    }

    return super.lookupVersionLabelForCommitId(commitId);
}

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 w  w  w  .  ja  v a 2s  . 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();
    }
}