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 构件。使用环境中可用的任何方法。

使用 CloudWatch Logs Insights 查找具有 1.x 客户端的应用程序

Amazon L CloudWatch ogs Insights 允许您查询发送到 CloudWatch 日志日志组 CloudTrail 的事件。使用此方法从 CloudTrail 记录中的 UserAgent 字段中识别 SDK 版本。你需要一个启用了CloudWatch 日志的 CloudTrail 跟踪。如果没有,请参阅使用 CloudTrail 控制台创建跟踪和将事件发送到 CloudWatch 日志

在 CloudWatch 控制台中,导航到 “日志” 下的 “日志见解”。选择您的 CloudTrail日志组,然后将时间范围设置为涵盖您要分析的时段。有关使用 Logs Insights 的详细信息,请参阅使用 Log s Insights 分析 CloudWatch 日志数据

以下示例查询可查找用户应用程序和第三方工具通过 SDK for Java 1.x 发出的所有请求。日志见解支持 Logs Insights QL 和 SQL。QL 查询使用在控制台中选择的日志组。SQL 查询要求您在FROM子句中指定日志组名称。

日志见解 QL 查询:

fields userIdentity.type, userIdentity.arn, eventSource, awsRegion, eventName, eventType, eventTime, userAgent, sourceIPAddress | filter userAgent like /aws-sdk-java\/1\./ | filter userAgent not like /aws-internal\// | sort eventTime desc

SQL 查询:

SELECT `userIdentity.type`, `userIdentity.arn`, eventSource, awsRegion, eventName, eventType, eventTime, userAgent, sourceIPAddress FROM `sample-cloudtrail-log-group` WHERE userAgent LIKE '%aws-sdk-java/1.%' AND userAgent NOT LIKE '%aws-internal/%' ORDER BY eventTime DESC

sample-cloudtrail-log-group替换为您的 CloudTrail 日志组的名称。

要导出结果,请选择导出结果。以下示例显示了 JSON 格式的单个事件:

{ "userIdentity.type": "AssumedRole", "userIdentity.arn": "arn:aws:sts::123456789012:assumed-role/Admin/Alice", "eventSource": "dynamodb.amazonaws.com", "awsRegion": "us-east-1", "eventName": "ListTables", "eventType": "AwsApiCall", "eventTime": "2025-07-01T22:02:23Z", "userAgent": "aws-sdk-java/1.12.746 Linux/5.10.240 OpenJDK/11.0.25+9-LTS ...", "sourceIPAddress": "12.345.6.78" }

在此示例中,Dynamo ListTables DB 请求是从 IP 12.345.6.78 地址发出2025-07-01T22:02:23 (UTC)的,使用代入角色的凭证。Admin/AliceUserAgent 字段显示请求是在装有 JDK 11 的 Linux 系统1.12.746上使用适用于 Java 的 SDK 版本发出的。

有关 AWS CloudTrail 事件记录中各字段的描述,请参阅CloudTrail 记录内容

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

CloudWatch Logs Insights 根据扫描的数据量对每次查询收费。如果您专门为此调查创建了跟踪,请考虑将其停止或删除,以避免持续收费。有关当前定价,请参阅 Amazon CloudWatch 定价

在应用程序警告级别的日志中搜索 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、或 Lambda 包中的那些)中找不到 SDK 类。lib/ WEB-INF/lib/对于精简 JARs版,请改为检查您的编译配置 (pom.xml,build.gradle) 或依赖关系树。对于嵌套 JARs,请 JARs 使用一种无需提取到磁盘即可递归读取 ZIP 存档的工具搜索捆绑包。

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

重要

AWS CloudTrail 从 2026 年 5 月 31 日起,Lake 不再向新客户开放。现有客户可以继续使用该服务。有关更多信息,请参阅CloudTrail 湖泊可用性变更。有关替代方法,请参见使用 CloudWatch Logs Insights 查找具有 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 定价