本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS SDK for Java 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 日发布)开始, AWS SDK for Java 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 的版本。在这种情况下,请使用本文档中描述的其他方法之一。
搜索源代码和依赖关系
您可以在代码库和构建配置文件中搜索对 AWS SDK for Java 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),以确认 AWS SDK for Java 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 系统的 AWS SDK for Java 版本发出的。
有关 AWS CloudTrail 事件记录中各字段的描述,请参阅管理、数据和网络活动事件的CloudTrail 记录内容。
CloudTrail 如果您的账户中未启用,请联系贵组织的 AWS 账户管理员将其启用,或者使用前几节中描述的替代方法之一。
CloudTrail Lake 会对每次查询摄取的数据和扫描的数据收费。为了最大限度地降低成本,请将查询筛选到特定的时间范围和区域。有关当前定价,请参阅 AWS CloudTrail 定价