

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 適用於 Java 的 AWS SDK 1.x 用戶端尋找應用程式
<a name="migration-find-apps-using-v1"></a>

在遷移至 之前 AWS SDK for Java 2.x，您需要識別環境中哪些應用程式使用適用於 Java 的 SDK 1.x 用戶端。您可以使用 CloudTrail 日誌來追蹤 SDK 用量、搜尋應用程式日誌以取得棄用警告、檢查您的原始程式碼和建置組態，或檢查您的可部署 Java 成品。使用您環境中可用的任何方法。

## 使用 CloudTrail Lake 尋找具有 1.x 用戶端的應用程式
<a name="migration-find-v1-apps-with-cloudtrail"></a>

AWS CloudTrail Lake 可讓您查詢 CloudTrail 記錄的事件。請依照下列步驟建立資料湖，以識別應用程式使用的 SDK 版本：

1. 建立 CloudTrail 資料湖。請參閱 [使用者指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-event-data-store.html)以建立事件資料存放區。

1. 建立資料存放區之後，請檢查記錄內容。記錄內文包含決定請求動作、時間和位置的欄位。如需詳細資訊，請參閱 [ CloudTrail 記錄內容的使用者指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)。

1. 針對您的資料執行查詢。遵循 [使用者指南來查詢和儲存查詢結果](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-run-query.html)。

每個記錄中的 *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 記錄內容](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)。

如果您的帳戶中未啟用 CloudTrail，請聯絡組織的 AWS 帳戶管理員來啟用 CloudTrail，或使用下列各節所述的替代方法之一。

CloudTrail Lake 會針對每個查詢擷取的資料和掃描的資料收取費用。若要將成本降至最低，請篩選特定時間範圍和區域的查詢。要了解目前的定價資訊，請參閱 [AWS CloudTrail 定價](https://aws.amazon.com/cloudtrail/pricing/)。

## 搜尋 SDK 取代的應用程式警告層級日誌
<a name="migration-find-v1-apps-log-warning"></a>

從 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 的版本。在這種情況下，請使用本文件所述的其他方法之一。

## 搜尋原始程式碼和相依性
<a name="migration-find-v1-apps-source-code"></a>

您可以搜尋程式碼庫並建置組態檔案，以取得 適用於 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 成品
<a name="migration-find-v1-apps-inspect-artifacts"></a>

您可以檢查可部署的 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`命令快速檢查
<a name="migration-find-v1-apps-jar-command"></a>

對於在最上層合併所有相依性類別的 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 封存，而無需擷取到磁碟。