List of usage examples for com.amazonaws.services.lambda AWSLambdaClient invoke
@Override
public InvokeResult invoke(InvokeRequest request)
Invokes a Lambda function.
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); }