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

基于Micronaut+GraalVM+Kotlin的S3触发Lambda函数报'Unconvertible input: null'

解决Micronaut Kotlin Lambda处理S3事件时的"Unconvertible input: null"错误

问题根源

你的代码存在两个核心问题:

  1. AbstractMicronautLambdaRuntime泛型参数不匹配:错误使用了API网关事件的泛型类型(APIGatewayProxyRequestEvent/APIGatewayProxyResponseEvent),但你的函数是处理S3事件的,这会导致Lambda运行时无法正确解析输入事件。
  2. Lambda Handler配置错误:自定义运行时的Handler应该指向继承AbstractMicronautLambdaRuntime的类,而非MicronautRequestHandler实现类。

修复步骤

1. 修正FunctionLambdaRuntime的泛型参数

修改FunctionLambdaRuntime.kt,将泛型参数替换为适配S3事件的类型:

package com.example
import com.amazonaws.services.lambda.runtime.RequestHandler
import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification
import io.micronaut.function.aws.runtime.AbstractMicronautLambdaRuntime
import java.net.MalformedURLException

class FunctionLambdaRuntime : AbstractMicronautLambdaRuntime<Void?, Void?, S3EventNotification, Void?>() {

    override fun createRequestHandler(vararg args: String?): RequestHandler<S3EventNotification, Void?> {
        return FunctionRequestHandler()
    }

    companion object {
        @JvmStatic
        fun main(vararg args: String) {
            try {
                FunctionLambdaRuntime().run(*args)
            } catch (e: MalformedURLException) {
                e.printStackTrace()
            }
        }
    }
}

2. 修正Lambda Handler配置

在AWS Lambda控制台的函数配置中,将Handler设置为:

com.example.FunctionLambdaRuntime

3. 重新构建并部署

执行构建命令重新生成原生镜像包:

./gradlew buildNativeLambda

将新生成的压缩包重新上传至Lambda函数。

验证测试

使用你提供的S3测试事件再次测试,此时函数应该能正常打印Hello, world!,不再出现"Unconvertible input: null"错误。真实的S3通知事件也能正确触发函数执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:26:03