本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 適用於 Java 的 AWS SDK 1.x 用戶端尋找應用程式
在遷移至 之前 AWS SDK for Java 2.x,您需要識別環境中哪些應用程式使用適用於 Java 的 SDK 1.x 用戶端。您可以使用 CloudTrail 日誌來追蹤 SDK 用量、搜尋應用程式日誌以取得棄用警告、檢查原始程式碼和建置組態,或檢查可部署的 Java 成品。使用您環境中可用的任何方法。
使用 CloudWatch Logs Insights 尋找具有 1.x 用戶端的應用程式
Amazon CloudWatch Logs Insights 可讓您查詢交付至 CloudWatch Logs 日誌群組的 CloudTrail CloudTrail 事件。使用此方法從 CloudTrail 記錄中的 userAgent 欄位識別 SDK 版本。您需要啟用 CloudWatch Logs 的 CloudTrail 追蹤。 CloudWatch 如果您沒有追蹤,請參閱使用 CloudTrail 主控台建立追蹤和將事件傳送至 CloudWatch Logs。
在 CloudWatch 主控台中,導覽至 Logs 下的 Logs Insights。選取您的 CloudTrail 日誌群組,並設定時間範圍以涵蓋您要分析的期間。如需使用 Logs Insights 的詳細資訊,請參閱使用 CloudWatch Logs Insights 分析日誌資料。
下列範例查詢會尋找使用適用於 Java 的 SDK 1.x 所提出之使用者應用程式和第三方工具的所有請求。Logs Insights 同時支援 Logs Insights QL 和 SQL。QL 查詢會使用在 主控台中選取的日誌群組。SQL 查詢會要求您在 FROM子句中指定日誌群組名稱。
Logs Insights 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
以 CloudTrail sample-cloudtrail-log-groupgroup。
若要匯出結果,請選擇匯出結果。下列範例顯示 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" }
在此範例中,DynamoDB ListTables請求是從 2025-07-01T22:02:23 (UTC) IP 地址發出,12.345.6.78其憑證為擔任角色 Admin/Alice。userAgent 欄位顯示請求是在具有 JDK 11 的 Linux 1.12.746 系統上使用適用於 Java 的 SDK 版本提出。
如需 AWS CloudTrail 事件記錄中欄位的說明,請參閱 CloudTrail 記錄內容。
如果您的帳戶中未啟用 CloudTrail,請聯絡組織的 AWS 帳戶管理員來啟用 CloudTrail,或使用下列各節所述的替代方法之一。
根據掃描的資料量,每個查詢的 CloudWatch Logs Insights 費用。如果您專為此調查建立追蹤,請考慮停止或刪除它,以避免持續收費。如需目前的定價,請參閱 Amazon CloudWatch 定價
搜尋 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 1.x 的 SDK 相依性的 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 封存,而無需擷取到磁碟。
使用 CloudTrail Lake 尋找具有 1.x 用戶端的應用程式
重要
AWS CloudTrail Lake 自 2026 年 5 月 31 日起不再向新客戶開放。現有客戶可以繼續使用 服務。如需詳細資訊,請參閱 CloudTrail Lake 可用性變更。如需替代方法,請參閱 使用 CloudWatch Logs Insights 尋找具有 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 欄位的值顯示請求是從具有 JDK 11 的 1.12.746 Linux 系統使用 適用於 Java 的 AWS SDK 版本提出。
如需 AWS CloudTrail 事件記錄中欄位的說明,請參閱適用於管理、資料和網路活動事件的 CloudTrail 記錄內容。
如果您的帳戶中未啟用 CloudTrail,請聯絡組織的 AWS 帳戶管理員來啟用 CloudTrail,或使用上述各節所述的替代方法之一。
CloudTrail Lake 會針對每個查詢擷取的資料和掃描的資料收取費用。若要將成本降至最低,請篩選特定時間範圍和區域的查詢。要了解目前的定價資訊,請參閱 AWS CloudTrail 定價