You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Spring Cloud Function到AWS Lambda遇FunctionCatalog异常排查

Spring Cloud Function部署AWS Lambda报错:FunctionCatalog找不到+任务超时

将最简Spring Cloud Function应用通过Docker镜像部署至AWS Lambda时,本地运行正常,但云端部署后抛出No qualifying bean of type 'org.springframework.cloud.function.context.FunctionCatalog' available异常,同时出现任务超时。

应用代码

@SpringBootApplication
public class GraalvmFuncExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(GraalvmFuncExampleApplication.class, args);
    }

    @Bean
    public Function<Mono<MyRequest>, Mono<MyResponse>> transform() {
        return req -> {
            return req.flatMap(r -> Mono.just(MyResponse.builder().name(r.getName().toUpperCase()).build()));
        };
    }
}

依赖配置(pom.xml)

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.2</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>vlad.dev</groupId>
<artifactId>graalvm-func-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>graalvm-func-example</name>
<description>Demo project for Spring Boot</description>
<properties>
    <java.version>17</java.version>
    <spring-cloud.version>2022.0.4</spring-cloud.version>
    <start-class>com.amazonaws.services.lambda.runtime.api.client.AWSLambda</start-class>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-function-parent</artifactId>
        <version>4.0.4</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-runtime-interface-client</artifactId>
        <version>2.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-function-adapter-aws</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-function-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

报错日志

14:07:40.192 [main] INFO org.springframework.cloud.function.utils.FunctionClassUtils -- Main class: class com.amazonaws.services.lambda.runtime.api.client.AWSLambda
.   ____          _            __ _ _
/\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::                (v3.1.2)
2023-08-12T14:07:42.761Z  INFO 9 --- [           main] o.s.c.f.a.aws.CustomRuntimeInitializer   : AWS Handler: org.springframework.cloud.function.adapter.aws.FunctionInvoker
2023-08-12T14:07:42.824Z  INFO 9 --- [           main] c.a.s.l.runtime.api.client.AWSLambda     : Starting AWSLambda v2.1.1 using Java 17.0.3 with PID 9 (/var/runtime/lib/aws-lambda-java-runtime-interface-client-2.1.1.jar started by sbx_user1051 in /)
2023-08-12T14:07:42.826Z  INFO 9 --- [           main] c.a.s.l.runtime.api.client.AWSLambda     : No active profile set, falling back to 1 default profile: "default"
2023-08-12T14:07:43.969Z  INFO 9 --- [           main] c.a.s.l.runtime.api.client.AWSLambda     : Started AWSLambda in 2.857 seconds (process running for 4.037)
No qualifying bean of type 'org.springframework.cloud.function.context.FunctionCatalog' available: org.springframework.beans.factory.NoSuchBeanDefinitionException
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.function.context.FunctionCatalog' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:341)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:332)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1173)
at org.springframework.cloud.function.adapter.aws.FunctionInvoker.start(FunctionInvoker.java:109)
at org.springframework.cloud.function.adapter.aws.FunctionInvoker.<init>(FunctionInvoker.java:71)
at org.springframework.cloud.function.adapter.aws.FunctionInvoker.<init>(FunctionInvoker.java:79)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
START RequestId: 6368b3eb-605f-490b-bc2e-f74972623968 Version: $LATEST
2023-08-12T14:08:35.442Z 6368b3eb-605f-490b-bc2e-f74972623968 Task timed out after 3.09 seconds

问题排查与解决方案

核心原因分析

  1. FunctionCatalog缺失:日志显示启动类是AWS的AWSLambda而非你的Spring Boot主类,导致Spring Cloud Function的自动配置逻辑未触发,核心Bean没初始化。
  2. 任务超时:超时是连锁反应——Lambda请求进来后,FunctionInvoker找不到函数Bean,处理流程卡住,最终触发Lambda超时限制。

具体修复步骤

1. 修正启动类配置

移除pom.xml中自定义的start-class,让Spring Boot默认用你的GraalvmFuncExampleApplication作为启动类。AWS Runtime Interface Client会通过Spring Cloud Function适配器自动衔接,不需要指定AWS的类。

修改后properties部分:

<properties>
    <java.version>17</java.version>
    <spring-cloud.version>2022.0.4</spring-cloud.version>
    <!-- 移除start-class配置 -->
</properties>

2. 优化依赖配置

  • 删掉spring-cloud-function-parent的pom依赖,Spring Cloud版本已经由spring-cloud.version的BOM管理,无需单独指定。
  • 添加Spring Cloud BOM来统一管理版本,避免依赖冲突。

调整后的依赖部分:

<dependencies>
    <!-- 移除spring-cloud-function-parent依赖 -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-runtime-interface-client</artifactId>
        <version>2.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-function-adapter-aws</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-function-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<!-- 添加Spring Cloud BOM管理版本 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3. 配置Lambda Handler

在AWS Lambda控制台或部署模板中,指定Handler为org.springframework.cloud.function.adapter.aws.FunctionInvoker,这是Spring Cloud Function适配Lambda的标准入口。

4. 调整Lambda资源配置

适当调高Lambda的内存(比如512MB)和超时时间(比如10秒),给Spring容器足够的启动和处理时间,避免因初始化慢导致超时。


内容的提问来源于stack exchange,提问作者Vladimir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:44:54