Skip to content

Error when using AWS Lambda Profiler Extension #529

Closed
@Vadym79

Description

@Vadym79

I just build the AWS Lambda Profiler Extension as descibed in here, published it as a Lambda layer and used it in my sample application.

During the Lambda invocation I first saw the log message
[PROFILER] premain is starting

and then got the following error message:

Class software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute does not have member field 'software.amazon.awssdk.core.interceptor.ExecutionAttribute BUSINESS_METRICS': java.lang.NoSuchFieldError
java.lang.NoSuchFieldError: Class software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute does not have member field 'software.amazon.awssdk.core.interceptor.ExecutionAttribute BUSINESS_METRICS'
software.amazon.awssdk.services.dynamodb.endpoints.internal.DynamoDbResolveEndpointInterceptor.resolveAndRecordAccountIdFromIdentity(DynamoDbResolveEndpointInterceptor.java:586)
	at software.amazon.awssdk.services.dynamodb.endpoints.internal.DynamoDbResolveEndpointInterceptor.ruleParams(DynamoDbResolveEndpointInterceptor.java:167)
	at software.amazon.awssdk.services.dynamodb.endpoints.internal.DynamoDbResolveEndpointInterceptor.modifyRequest(DynamoDbResolveEndpointInterceptor.java:116)
	at software.amazon.awssdk.core.interceptor.ExecutionInterceptorChain.modifyRequest(ExecutionInterceptorChain.java:65)
	at software.amazon.awssdk.awscore.internal.AwsExecutionContextBuilder.runInitialInterceptors(AwsExecutionContextBuilder.java:243)
	at software.amazon.awssdk.awscore.internal.AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(AwsExecutionContextBuilder.java:132)
	at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.invokeInterceptorsAndCreateExecutionContext(AwsSyncClientHandler.java:67)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:76)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:182)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:74)
	at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
	at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:53)
	at software.amazon.awssdk.services.dynamodb.DefaultDynamoDbClient.putItem(DefaultDynamoDbClient.java:4435)
	at software.amazonaws.example.product.dao.DynamoProductDao.putProduct(DynamoProductDao.java:56)
	at software.amazonaws.example.product.handler.CreateProductHandler.handleRequest(CreateProductHandler.java:27)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

You can test my using my application : build it with mvn clean package and deploy it with sam deploy. Then use AWSLambdaWithProfilerLayerJava21API in API Gateway and invoke /product PUT HTTP method with the body { "id": 1, "name": "Print 10x13", "price": 0.15 }. This application is simple: API Gateway invokes Lambda Function (PutProductWithPureJava21WithProfilerLayer) and it persists the product record into the DynamoDB table AWSLambdaWithProfilerLayerJava21ProductsTable.

If I comment the following line in the template.yaml

#JAVA_TOOL_OPTIONS: -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -javaagent:/opt/profiler-extension.jar

which defines the agent, everything works fine. Please advice

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions