View a markdown version of this page

使用 适用于 Java 的 AWS SDK 1.x 客户端查找应用程序 - AWS SDK for Java 2.x

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 适用于 Java 的 AWS SDK 1.x 客户端查找应用程序

在迁移到之前 AWS SDK for Java 2.x,您需要确定您的环境中哪些应用程序使用 SDK for Java 1.x 客户端。您可以使用 CloudTrail 日志来跟踪 SDK 的使用情况,在应用程序日志中搜索弃用警告,检查源代码和编译配置,或者检查可部署的 Java 构件。使用环境中可用的任何方法。

使用 CloudTrail Lake 查找具有 1.x 客户端的应用程序

AWS CloudTrail Lake 允许您查询由记录的事件 CloudTrail。按照以下步骤来创建数据湖,用于识别应用程序使用的 SDK 版本:

  1. 创建 CloudTrail 数据湖。要创建事件数据存储,请参阅用户指南

  2. 创建数据存储后,检查记录内容。记录正文包含用于确定请求的操作、计时和位置的字段。有关详细信息,请参阅用户指南以获取 CloudTrail 录制内容

  3. 对您的数据运行查询。按照用户指南来查询和保存查询结果

每条记录中的 userAgent 字段包含发出请求的 SDK 版本。使用此字段来识别使用适用于 Java 的 SDK 1.x 的应用程序。

以下示例查询将查找从 2025 年 6 月 17 日起,用户应用程序和第三方工具使用 SDK for Java 1.x 发出的所有 EventDatastore ID sample-Data-Store-Id 请求:

select userIdentity, eventSource, awsRegion, eventName, eventType, eventTime, userAgent, requestParameters, sourceIPAddress from sample-Data-Store-Id where eventTime > '2025-06-17 00:00:00' and userAgent like '%aws-sdk-java/1.%' and userAgent not like '%aws-internal/%' order by eventTime desc

查询结果中的事件内容类似于以下示例:

{ "userIdentity": "{ "type": "IAMUser", "principalId": "AIDAJ45Q7YFFAREXAMPLE", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "", "userName": "Alice" }", "eventSource": "dynamodb.amazonaws.com", "awsRegion": "us-west-2", "eventName": "ListTables", "eventType": "AwsApiCall", "eventTime": "2025-07-01 02:23:52.000", "userAgent": "aws-sdk-java/1.12.746 Linux/5.10.240 OpenJDK/11.0.25+9-LTS ...", "requestParameters": "", "sourceIPAddress": "12.345.6.78" }

您可以使用此信息来帮助确定何时何地发出请求。

在示例中,使用名为 Alice 的 IAM 用户的凭证,在 2025-07-01 02:23:52 (UTC) 从 IP 地址 12.345.6.78 发出 DynamoDB ListTables 请求。userAgent 字段的值显示请求是使用装有 JDK 11 1.12.746 的 Linux 系统的 适用于 Java 的 AWS SDK 版本发出的。

有关 AWS CloudTrail 事件记录中各字段的描述,请参阅管理、数据和网络活动事件的CloudTrail 记录内容

CloudTrail 如果您的账户中未启用,请联系贵组织的 AWS 账户管理员将其启用,或者使用以下各节中描述的替代方法之一。

CloudTrail Lake 会对每次查询摄取的数据和扫描的数据收费。为了最大限度地降低成本,请将查询筛选到特定的时间范围和区域。有关当前定价,请参阅 AWS CloudTrail 定价

在应用程序警告级别的日志中搜索 SDK 的弃用

从 1.12.767 版本(2024 年 7 月 30 日发布)开始, 适用于 Java 的 AWS SDK 1.x 会在应用程序启动时发出弃用警告。您可以在应用程序日志中搜索此警告,以确定哪些应用程序和主机正在使用 SDK for Java 1.x。

警告的确切措辞取决于 SDK 版本:

  • 版本 1.12.767 到 1.12.796:

    WARNING: The AWS SDK for Java 1.x entered maintenance mode starting July 31, 2024 and will reach end of support on December 31, 2025...

  • 版本 1.12.797 及更高版本:

    WARNING: The AWS SDK for Java 1.x reached end of support on December 31, 2025...

尾部...表示警告消息继续显示其他文本。您可以搜索常用前缀The AWS SDK for Java 1.x来查找警告的任一版本。

以下示例演示如何使用以下方法搜索此警告grep

grep -r "The AWS SDK for Java 1.x" /path/to/your/application/logs/

如果找到警告,该grep命令将打印匹配的日志行。如果未找到警告,则可能是您的应用程序未使用适用于 Java 1.x 的 SDK,或者它使用的是低于 1.12.767 的版本。在这种情况下,请使用本文档中描述的其他方法之一。

搜索源代码和依赖关系

您可以在代码库和构建配置文件中搜索对 适用于 Java 的 AWS SDK 1.x 的引用。密钥标识符是com.amazonaws群组 ID,所有 SDK for Java 1.x 工件都使用该标识。

以下示例演示了grep如何使用在常用 Java 项目文件中搜索com.amazonaws引用。

示例:在 Java 源文件中搜索适用于 Java 的 SDK 1.x 导入(从项目根目录运行)

grep -r "import com.amazonaws" --include="*.java" .

输出示例:

src/main/java/com/example/App.java:import com.amazonaws.services.s3.AmazonS3;
注意

不属于适用于 Java SDK 1.x 的库也使用该软件包,例如aws-lambda-java-corecom.amazonaws要确认导入源自 SDK for Java 1.x,请检查您的pom.xmlbuild.gradle、或依赖项管理配置中相应的工件 ID 是否以aws-java-sdk-开头。

示例:在 Maven pom.xml 文件中搜索适用于 Java 的 SDK 1.x 依赖项(从项目根目录运行)

grep -r "com.amazonaws" --include="pom.xml" .

输出示例:

pom.xml: <groupId>com.amazonaws</groupId>

示例:在 Gradle 构建文件中搜索 SDK for Java 1.x 依赖项(从项目根目录运行)

grep -r "com.amazonaws:aws-java-sdk" --include="*.gradle" .

输出示例:

build.gradle: implementation 'com.amazonaws:aws-java-sdk-s3:1.12.xxx'

前面的grep命令标识了直接在源文件和编译文件中声明的 SDK for Java 1.x 引用。但是,您的应用程序也可能通过本身依赖于 SDK 的 SDK for Java 1.x,即通过本身依赖于 SDK 的第三方库。使用构建工具的依赖关系树查找适用于 Java 1.x 的 SDK 的直接依赖关系和传递依赖关系。选择与您的编译系统相匹配的示例。

示例:使用 Maven 查找所有适用于 Java 的 SDK 1.x 依赖项(从项目根目录运行)

mvn dependency:tree -Dincludes=com.amazonaws

输出示例:

[INFO] com.example:my-application:jar:1.0-SNAPSHOT [INFO] +- com.amazonaws:aws-java-sdk-s3:jar:1.12.746:compile [INFO] | \- com.amazonaws:aws-java-sdk-core:jar:1.12.746:compile [INFO] \- some.thirdparty:library:jar:2.3.1:compile [INFO] \- com.amazonaws:aws-java-sdk-dynamodb:jar:1.12.600:compile

-Dincludes=com.amazonaws标志会筛选树以仅显示适用于 Java 的 SDK 1.x 构件。在此示例中,aws-java-sdk-s3是直接依赖关系,但aws-java-sdk-dynamodb它是由some.thirdparty:library引入的传递依赖关系。

示例:使用 Gradle 查找所有适用于 Java 的 SDK 1.x 依赖项(从项目根目录运行)

gradle dependencies --configuration runtimeClasspath | grep "com.amazonaws"

输出示例:

+--- com.amazonaws:aws-java-sdk-s3:1.12.746 | \--- com.amazonaws:aws-java-sdk-core:1.12.746 \--- com.amazonaws:aws-java-sdk-dynamodb:1.12.600

Gradle 没有与 Maven 相当的内置依赖过滤器-Dincludes,因此管道传递grep是最简单的方法。

检查可部署的 Java 工件

您可以检查可部署的 Java 工件(JARs WARs、或 EARs),以确认 适用于 Java 的 AWS SDK 1.x 是否与您的应用程序打包在一起。Java 存档文件是 ZIP 格式的文件。要确定是否存在适用于 Java 的 SDK 1.x,请在存档com/amazonaws/sdk/versionInfo.properties中查找该文件。此文件包含在aws-java-sdk-core模块中,并包含 SDK 版本号。

使用jar命令快速检查

对于所有依赖类都在顶层合并的 uber-jar,请列出存档内容并搜索版本文件:

在以下示例中,myapp.jar替换为应用程序的 JAR 文件的路径。

jar -tf myapp.jar | grep 'versionInfo.properties'

如果有 SDK,则输出为:

com/amazonaws/sdk/versionInfo.properties

如果该jar命令在您的环境中不可用(例如,仅限 JRE 或最小容器镜像),则可以改用unzip -l

unzip -l myapp.jar | grep 'versionInfo.properties'

要打印版本,请执行以下操作:

unzip -p myapp.jar com/amazonaws/sdk/versionInfo.properties

输出示例:

platform=java version=1.12.xxx
注意

前面的命令仅搜索 uber-jar 中的顶级条目。他们不会在精简 JARs (其中依赖项是外部依赖项)或嵌套内部 JARs (例如 WARs EARs、中的那些或lib/WEB-INF/lib/下的 Lambda 包)中找不到 SDK 类。对于精简 JARs版,请改为检查您的编译配置 (pom.xml,build.gradle) 或依赖关系树。对于嵌套 JARs,请 JARs 使用一种无需解压缩到磁盘即可递归读取 ZIP 存档的工具搜索捆绑包。