Search in sources :

Example 1 with ResourceNotFoundException

use of com.amazonaws.services.lambda.model.ResourceNotFoundException in project nifi by apache.

the class PutLambda method onTrigger.

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) {
    FlowFile flowFile = session.get();
    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();
    }
}
Also used : FlowFile(org.apache.nifi.flowfile.FlowFile) ByteArrayOutputStream(java.io.ByteArrayOutputStream) InvokeResult(com.amazonaws.services.lambda.model.InvokeResult) InvalidParameterValueException(com.amazonaws.services.lambda.model.InvalidParameterValueException) ResourceNotFoundException(com.amazonaws.services.lambda.model.ResourceNotFoundException) AmazonServiceException(com.amazonaws.AmazonServiceException) RequestTooLargeException(com.amazonaws.services.lambda.model.RequestTooLargeException) InvalidRequestContentException(com.amazonaws.services.lambda.model.InvalidRequestContentException) UnsupportedMediaTypeException(com.amazonaws.services.lambda.model.UnsupportedMediaTypeException) TooManyRequestsException(com.amazonaws.services.lambda.model.TooManyRequestsException) RequestTooLargeException(com.amazonaws.services.lambda.model.RequestTooLargeException) TooManyRequestsException(com.amazonaws.services.lambda.model.TooManyRequestsException) UnsupportedMediaTypeException(com.amazonaws.services.lambda.model.UnsupportedMediaTypeException) InvalidParameterValueException(com.amazonaws.services.lambda.model.InvalidParameterValueException) AmazonServiceException(com.amazonaws.AmazonServiceException) AWSLambdaClient(com.amazonaws.services.lambda.AWSLambdaClient) InvalidRequestContentException(com.amazonaws.services.lambda.model.InvalidRequestContentException) InvokeRequest(com.amazonaws.services.lambda.model.InvokeRequest) ResourceNotFoundException(com.amazonaws.services.lambda.model.ResourceNotFoundException)

Example 2 with ResourceNotFoundException

use of com.amazonaws.services.lambda.model.ResourceNotFoundException in project intellij-idea-plugin-connector-for-aws-lambda by satr.

the class FunctionConnectorModel method updateWithJar.

public OperationValueResult<FunctionEntity> updateWithJar(final FunctionEntity functionEntity, final File file) {
    final OperationValueResultImpl<FunctionEntity> operationResult = new OperationValueResultImpl<>();
    validateLambdaFunctionJarFile(file, operationResult);
    if (operationResult.failed())
        return operationResult;
    try {
        final String readOnlyAccessFileMode = "r";
        try (RandomAccessFile randomAccessFile = new RandomAccessFile(file, readOnlyAccessFileMode);
            final FileChannel fileChannel = randomAccessFile.getChannel()) {
            return updateFunctionCode(functionEntity, fileChannel);
        }
    } catch (InvalidParameterValueException e) {
        operationResult.addError("Invalid request parameters: %s", e.getMessage());
    } catch (ResourceNotFoundException e) {
        operationResult.addError("Function not found.");
    } catch (Exception e) {
        e.printStackTrace();
        operationResult.addError(e.getMessage());
    }
    return operationResult;
}
Also used : OperationValueResultImpl(io.github.satr.common.OperationValueResultImpl) RandomAccessFile(java.io.RandomAccessFile) FileChannel(java.nio.channels.FileChannel) ResourceNotFoundException(com.amazonaws.services.lambda.model.ResourceNotFoundException) ResourceNotFoundException(com.amazonaws.services.lambda.model.ResourceNotFoundException) IOException(java.io.IOException)

Aggregations

ResourceNotFoundException (com.amazonaws.services.lambda.model.ResourceNotFoundException)2 AmazonServiceException (com.amazonaws.AmazonServiceException)1 AWSLambdaClient (com.amazonaws.services.lambda.AWSLambdaClient)1 InvalidParameterValueException (com.amazonaws.services.lambda.model.InvalidParameterValueException)1 InvalidRequestContentException (com.amazonaws.services.lambda.model.InvalidRequestContentException)1 InvokeRequest (com.amazonaws.services.lambda.model.InvokeRequest)1 InvokeResult (com.amazonaws.services.lambda.model.InvokeResult)1 RequestTooLargeException (com.amazonaws.services.lambda.model.RequestTooLargeException)1 TooManyRequestsException (com.amazonaws.services.lambda.model.TooManyRequestsException)1 UnsupportedMediaTypeException (com.amazonaws.services.lambda.model.UnsupportedMediaTypeException)1 OperationValueResultImpl (io.github.satr.common.OperationValueResultImpl)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 IOException (java.io.IOException)1 RandomAccessFile (java.io.RandomAccessFile)1 FileChannel (java.nio.channels.FileChannel)1 FlowFile (org.apache.nifi.flowfile.FlowFile)1