quarkusio/quarkus · error · RuntimeException

There are no functions to process lambda

Error message

There are no functions to process lambda

What it means

Funqy Amazon Lambda dispatches incoming invocations to a chosen function invoker. If no quarkus.funqy.export is set and the registry contains zero functions, there is nothing to dispatch to, so this RuntimeException is thrown at runtime init.

Source

Thrown at extensions/funqy/funqy-amazon-lambda/runtime/src/main/java/io/quarkus/funqy/lambda/FunqyLambdaBindingRecorder.java:95

            }
            if (invoker.hasOutput()) {
                JavaType javaOutputType = objectMapper.constructType(invoker.getOutputType());
                ObjectWriter writer = objectMapper.writerFor(javaOutputType);
                invoker.getBindingContext().put(ObjectWriter.class.getName(), writer);
            }
        }
    }

    public void chooseInvoker() {
        // this is done at Runtime so that we can change it with an environment variable.
        if (runtimeConfig.getValue().export().isPresent()) {
            invoker = FunctionRecorder.registry.matchInvoker(runtimeConfig.getValue().export().get());
            if (invoker == null) {
                throw new RuntimeException(
                        "quarkus.funqy.export does not match a function: " + runtimeConfig.getValue().export().get());
            }
        } else if (FunctionRecorder.registry.invokers().size() == 0) {
            throw new RuntimeException("There are no functions to process lambda");

        } else if (FunctionRecorder.registry.invokers().size() > 1) {
            throw new RuntimeException("Too many functions.  You need to set quarkus.funqy.export");
        } else {
            invoker = FunctionRecorder.registry.invokers().iterator().next();
        }

        ObjectReader objectReader = null;
        if (invoker.hasInput()) {
            objectReader = (ObjectReader) invoker.getBindingContext().get(ObjectReader.class.getName());

            if (amazonBuildTimeConfig.advancedEventHandling().enabled()) {
                // We create a copy, because the mapper will be reconfigured for the advanced event handling,
                // and we do not want to adjust the ObjectMapper, which is available in arc context.
                JsonMapper jsonMapper = AmazonLambdaMapperRecorder.objectMapper;
                JsonMapper.Builder builder = jsonMapper.rebuild();
                reader = new AwsEventInputReader(builder, objectReader, amazonBuildTimeConfig);
            } else {

View on GitHub (pinned to e1c734241f)

Solutions

  1. Add @Funq-annotated function methods to the application
  2. Ensure the module containing the functions is included in the deployed artifact
  3. Verify the Lambda is pointed at the correct JAR/native binary build output
  4. If the app intentionally has no functions, remove the funqy-amazon-lambda binding dependency

Example fix

// before
class Functions { }
// after
class Functions {
    @Funq
    public String hello(String name) { return "hello " + name; }
}
Defensive patterns

Strategy: validation

Validate before calling

long count = Arrays.stream(Functions.class.getDeclaredMethods())
    .filter(m -> m.isAnnotationPresent(Funq.class)).count();
if (count == 0) throw new IllegalStateException("No @Funq functions found; Lambda has nothing to invoke");

Prevention

When it happens

Trigger: The Lambda runtime starts with no @Funq-annotated functions registered in FunctionRecorder.registry and no quarkus.funqy.export configured.

Common situations: Deployed a Lambda artifact whose code has no @Funq methods; functions in a module not included in the build; wrong artifact deployed to Lambda; dependency providing Funqy binding but no function beans.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/5b65e7e375d3ff8d. Report an issue: GitHub.