本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 适用于 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-core。com.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 版本:
-
创建 CloudTrail 数据湖。要创建事件数据存储,请参阅用户指南。
-
创建数据存储后,检查记录内容。记录正文包含用于确定请求的操作、计时和位置的字段。有关详细信息,请参阅用户指南以获取 CloudTrail 录制内容。
-
对您的数据运行查询。按照用户指南来查询和保存查询结果。
每条记录中的 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 定价