本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 適用於 Java 的 AWS SDK 1.x 用戶端尋找應用程式
在遷移至 之前 AWS SDK for Java 2.x,您需要識別環境中哪些應用程式使用適用於 Java 的 SDK 1.x 用戶端。您可以使用 CloudTrail 日誌來追蹤 SDK 用量、搜尋應用程式日誌以取得棄用警告、檢查您的原始程式碼和建置組態,或檢查您的可部署 Java 成品。使用您環境中可用的任何方法。
使用 CloudTrail Lake 尋找具有 1.x 用戶端的應用程式
AWS CloudTrail Lake 可讓您查詢 CloudTrail 記錄的事件。請依照下列步驟建立資料湖,以識別應用程式使用的 SDK 版本:
-
建立 CloudTrail 資料湖。請參閱 使用者指南以建立事件資料存放區。
-
建立資料存放區之後,請檢查記錄內容。記錄內文包含決定請求動作、時間和位置的欄位。如需詳細資訊,請參閱 CloudTrail 記錄內容的使用者指南。
-
針對您的資料執行查詢。遵循 使用者指南來查詢和儲存查詢結果。
每個記錄中的 userAgent 欄位都包含提出請求的 SDK 版本。使用此欄位來識別使用適用於 Java 的 SDK 1.x 的應用程式。
下列範例查詢會尋找從 2025 年 6 月 17 日開始針對 EventDatastoreID 使用適用於 Java 的 SDK 1.x 提出的使用者應用程式和第三方工具的所有請求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" }
您可以使用此資訊來協助判斷提出請求的時間和位置。
在此範例中,DynamoDB ListTables請求是從 IP 地址2025-07-01 02:23:52 (UTC)發出,12.345.6.78其憑證為名為 Alice 的 IAM 使用者。userAgent 欄位的值顯示請求是使用1.12.746具有 JDK 11 的 Linux 系統 適用於 Java 的 AWS SDK 版本提出的。
如需 AWS CloudTrail 事件記錄中欄位的說明,請參閱適用於管理、資料和網路活動事件的 CloudTrail 記錄內容。
如果您的帳戶中未啟用 CloudTrail,請聯絡組織的 AWS 帳戶管理員來啟用 CloudTrail,或使用下列各節所述的替代方法之一。
CloudTrail Lake 會針對每個查詢擷取的資料和掃描的資料收取費用。若要將成本降至最低,請篩選特定時間範圍和區域的查詢。要了解目前的定價資訊,請參閱 AWS CloudTrail 定價
搜尋 SDK 取代的應用程式警告層級日誌
從 1.12.767 版 (2024 年 7 月 30 日發行) 開始, 適用於 Java 的 AWS SDK 1.x 會在應用程式啟動時發出棄用警告。您可以搜尋應用程式日誌以取得此警告,以識別哪些應用程式和主機正在使用適用於 Java 的 SDK 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 的 SDK 1.x,或使用早於 1.12.767 的版本。在這種情況下,請使用本文件所述的其他方法之一。
搜尋原始程式碼和相依性
您可以搜尋程式碼庫並建置組態檔案,以取得 適用於 Java 的 AWS SDK 1.x 的參考。金鑰識別符是com.amazonaws群組 ID,供所有適用於 Java 的 SDK 1.x 成品使用。
下列範例示範如何使用 grep搜尋常見 Java 專案檔案的com.amazonaws參考。
範例:搜尋適用於 Java 1.x 的 SDK 匯入的 Java 來源檔案 (從專案根目錄執行)
grep -r "import com.amazonaws" --include="*.java" .
輸出範例:
src/main/java/com/example/App.java:import com.amazonaws.services.s3.AmazonS3;
注意
此com.amazonaws套件也供不屬於適用於 Java 的 SDK 1.x 的程式庫使用,例如 aws-lambda-java-core。若要確認匯入來自適用於 Java 的 SDK 1.x,請檢查 pom.xml、 build.gradle或 相依性管理組態中的對應成品 ID 是否以 開頭aws-java-sdk-。
範例:搜尋適用於 Java 1.x 的 SDK 相依性的 Maven pom.xml 檔案 (從專案根目錄執行)
grep -r "com.amazonaws" --include="pom.xml" .
輸出範例:
pom.xml: <groupId>com.amazonaws</groupId>
範例:搜尋適用於 Java 的 SDK 1.x 相依性的 Gradle 建置檔案 (從專案根目錄執行)
grep -r "com.amazonaws:aws-java-sdk" --include="*.gradle" .
輸出範例:
build.gradle: implementation 'com.amazonaws:aws-java-sdk-s3:1.12.xxx'
上述grep命令會識別直接在您的來源和建置檔案中宣告的適用於 Java 1.x 的 SDK 參考。不過,您的應用程式也可能暫時依賴適用於 Java 的 SDK 1.x - 透過第三方程式庫,而該程式庫本身依賴於 SDK。使用建置工具的相依性樹狀目錄,尋找適用於 Java 1.x 的直接和可轉移 SDK 相依性。選擇符合您建置系統的範例。
範例:使用 Maven 來尋找所有適用於 Java 1.x 的可轉移 SDK 相依性 (從專案根目錄執行)
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 1.x 成品的 SDK。在此範例中, aws-java-sdk-s3 是直接相依性,但aws-java-sdk-dynamodb是由 引入的暫時性相依性some.thirdparty:library。
範例:使用 Gradle 來尋找所有適用於 Java 1.x 的暫時性 SDK 相依性 (從專案根目錄執行)
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-jars 中的頂層項目。他們無法在精簡 JARs (其中相依性為外部) 或巢狀 JARs (例如 WARs、EARs 或 下 Lambda lib/ 套件中的類別) 中找到開發套件類別WEB-INF/lib/。對於精簡 JARs,請改為檢查您的建置組態 (pom.xml、build.gradle) 或相依性樹狀目錄。對於巢狀 JARs,請使用工具來搜尋綁定JARs,該工具可以遞迴讀取 ZIP 封存,而無需擷取到磁碟。