micronaut-projects / micronaut-aws

Projects specific to integrating Micronaut and Amazon Web Services (AWS)
Apache License 2.0
82 stars 81 forks source link

FunctionClient not compatible with GraalVM when invoking lambda functions #2065

Open sh1bz opened 4 months ago

sh1bz commented 4 months ago

Expected Behavior

implementation("io.micronaut.aws:micronaut-function-client-aws")

@FunctionClient interface LambdaClient { @Named("checkout") fun checkout(request: FunctionRequest): FunctionResponse }

Invoking this method works when building using Java 21 ShadowJar and invoking it from another lambda.

Actual Behaviour

When deploying with buildNativeLambda for GraalVM Custom Runtime its throwing an exception:

context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2312) at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3114) at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80) at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:3016) at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2977) at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2751) at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1750) at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:89) at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2165) at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1328) at io.micronaut.function.client.aws.$AWSLambdaFunctionExecutor$Definition.instantiate(Unknown Source) at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2330) at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2300) at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2312) at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3114) at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80) at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:3016) at io.micronaut.context.DefaultBeanContext.initializeEagerBean(DefaultBeanContext.java:2697) at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1995) ... 16 more Caused by: java.lang.ExceptionInInitializerError at com.amazonaws.util.VersionInfoUtils.userAgent(VersionInfoUtils.java:142) at com.amazonaws.util.VersionInfoUtils.initializeUserAgent(VersionInfoUtils.java:137) at com.amazonaws.util.VersionInfoUtils.getUserAgent(VersionInfoUtils.java:100) at com.amazonaws.ClientConfiguration.(ClientConfiguration.java:80) at io.micronaut.aws.sdk.v1.AWSClientConfiguration.(AWSClientConfiguration.java:36) at io.micronaut.aws.sdk.v1.$AWSClientConfiguration$Definition.instantiate(Unknown Source) at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2330) ... 73 more Caused by: java.lang.IllegalArgumentException at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:260) at com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:274) at com.amazonaws.internal.config.InternalConfig$Factory.(InternalConfig.java:347) ... 80 more Request loop failed with: Bean definition [io.micronaut.function.client.aws.AWSLambdaFunctionExecutor] could not be loaded: Error instantiating bean of type [io.micronaut.function.client.aws.AWSLambdaConfiguration] Path Taken: new AWSLambdaFunctionExecutor(AWSLambdaAsync asyncClient,ByteBufferFactory byteBufferFactory,JsonMediaTypeCodec jsonMediaTypeCodec,ExecutorService ioExecutor) --> new AWSLambdaFunctionExecutor([AWSLambdaAsync asyncClient],ByteBufferFactory byteBufferFactory,JsonMediaTypeCodec jsonMediaTypeCodec,ExecutorService ioExecutor) --> new AWSLambdaAsyncClientFactory([AWSLambdaConfiguration configuration]) --> new AWSLambdaConfiguration([AWSClientConfiguration clientConfiguration],Environment environment) 17:41:39.394 [main] INFO  i.m.s.ObjectMappers$ObjectMapperContext$1 - Established active environments: [ec2, cloud, dev]

{ "errorMessage": "Bean definition [io.micronaut.function.client.aws.AWSLambdaFunctionExecutor] could not be loaded: Error instantiating bean of type [io.micronaut.function.client.aws.AWSLambdaConfiguration]\n\nPath Taken: new AWSLambdaFunctionExecutor(AWSLambdaAsync asyncClient,ByteBufferFactory byteBufferFactory,JsonMediaTypeCodec jsonMediaTypeCodec,ExecutorService ioExecutor) --> new AWSLambdaFunctionExecutor([AWSLambdaAsync asyncClient],ByteBufferFactory byteBufferFactory,JsonMediaTypeCodec jsonMediaTypeCodec,ExecutorService ioExecutor) --> new AWSLambdaAsyncClientFactory([AWSLambdaConfiguration configuration]) --> new AWSLambdaConfiguration([AWSClientConfiguration clientConfiguration],Environment environment)" }

Steps To Reproduce

  1. Invoke Lambda ClientFunction from another lambda runnon on GraalVM

Environment Information

AWS Lambda -> x86 64 ( GraalVM ) Custom Runtime

Example Application

No response

Version

4.3.4

sdelamo commented 4 months ago

@msupic is this something you could investigate?