Example usage for com.amazonaws.services.lambda AWSLambdaClient invoke

List of usage examples for com.amazonaws.services.lambda AWSLambdaClient invoke

Introduction

In this page you can find the example usage for com.amazonaws.services.lambda AWSLambdaClient invoke.

Prototype

@Override
public InvokeResult invoke(InvokeRequest request) 

Source Link

Document

Invokes a Lambda function.

Usage

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();/*ww w  .  j a  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();
    }
}

From source file:org.diksha.common.utils.SchedulerActivitiesImpl.java

License:Apache License

@Override
public void runPeriodicActivity(String functionName, String functionContext) {

    ActivityExecutionContextProvider provider = new ActivityExecutionContextProviderImpl();
    ActivityExecutionContext aec = provider.getActivityExecutionContext();
    //   System.out.println("NOw invoking lambda");

    String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID");
    String swfSecretKey = System.getenv("AWS_SECRET_ACCESS_KEY");
    AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey);

    AWSLambdaClient alc = new AWSLambdaClient(awsCredentials);
    InvokeRequest invokeRequest = new InvokeRequest();

    System.out.println("invoking function " + functionName + " for executionId "
            + aec.getWorkflowExecution().getWorkflowId());
    invokeRequest.setFunctionName(functionName);
    invokeRequest.setInvocationType("Event");
    invokeRequest.setClientContext(functionContext);
    alc.invoke(invokeRequest);

}