0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring boot3でPowertools for AWS Lambda (Java)のTracing機能を使いたい!

Last updated at Posted at 2025-02-01

はじめに

Powertools for AWS Lambda (Java)で性能測定をしてたのですが、公式に書いている通りに導入できなかったので、記事にしてみた。

こんなエラーが出る。

クラスローディングのタイミングで、以下のエラーが出てた。

Caused by: java.lang.NoSuchFieldError: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
at com.amazonaws.xray.interceptors.TracingInterceptor.(TracingInterceptor.java:70)

原因は?

Jacksonってモジュールが以前利用していた、CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORESを利用している模様。

aws-xray-recorder-sdk-aws-sdk-v2-2.14.0.jarを参照してみると、確かに使ってる。

スクリーンショット 2025-02-01 8.12.03.png

SpringBootとXray用のライブラリそれぞれが使っているJacksonのバージョンに差異があるみたい。

どこから参照されている?

./gradlew dependencyInsight --dependency aws-xray-recorder-sdk-aws-sdk-v2

誰が使っているかを調査します。

> Task :dependencyInsight
com.amazonaws:aws-xray-recorder-sdk-aws-sdk-v2:2.14.0
  Variant compile:
    | Attribute Name                 | Provided | Requested    |
    |--------------------------------|----------|--------------|
    | org.gradle.status              | release  |              |
    | org.gradle.category            | library  | library      |
    | org.gradle.libraryelements     | jar      | classes      |
    | org.gradle.usage               | java-api | java-api     |
    | org.gradle.dependency.bundling |          | external     |
    | org.gradle.jvm.environment     |          | standard-jvm |
    | org.gradle.jvm.version         |          | 17           |

com.amazonaws:aws-xray-recorder-sdk-aws-sdk-v2:2.14.0
\--- software.amazon.lambda:powertools-tracing:1.18.0
     \--- compileClasspath

com.amazonaws:aws-xray-recorder-sdk-aws-sdk-v2-instrumentor:2.14.0
  Variant compile:
    | Attribute Name                 | Provided | Requested    |
    |--------------------------------|----------|--------------|
    | org.gradle.status              | release  |              |
    | org.gradle.category            | library  | library      |
    | org.gradle.libraryelements     | jar      | classes      |
    | org.gradle.usage               | java-api | java-api     |
    | org.gradle.dependency.bundling |          | external     |
    | org.gradle.jvm.environment     |          | standard-jvm |
    | org.gradle.jvm.version         |          | 17           |

com.amazonaws:aws-xray-recorder-sdk-aws-sdk-v2-instrumentor:2.14.0
\--- software.amazon.lambda:powertools-tracing:1.18.0
     \--- compileClasspath

参照元はsoftware.amazon.lambda:powertools-tracingですね。

Mavenリポジトリを確認しても、PowerToolsモジュール自体は最新なんだけど、現時点で最新の2.18.2ではなく、2.14.0(Apr 13, 2023)を利用しているみたい。

なぜ2.14.0を利用しているか調べてみると、powertools-tracingの親POMpowertools-parentに指定がありました!

<aws.xray.recorder.version>2.14.0</aws.xray.recorder.version>

対処法

Jackson(jackson-databind)を内包しているSpringBootのバージョンを下げることで、Jacksonのバージョンを下げることも可能ですが、明示的に aws-xray-recorder-sdk-aws-sdk-v2を利用するように定義し、バージョンを2.14.0->2.18.2まで上げてるとエラーがなくなりました!

> implementation group: 'com.amazonaws', name: 'aws-xray-recorder-sdk-aws-sdk-v2', version: '2.18.2'

同じモジュールを複数の箇所で利用している場合、nearest winsの法則で、間接的に依存しているものより、直接的に指定したものを優先するみたいです。

まとめ

本当は性能改善の記事を書きたかったのですが、この問題や最近の体調不良のせいもあって、一旦ここまでにします。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?