

支援終止通知：2025 年 11 月 13 日， AWS 將停止對 Amazon Elastic Transcoder 的支援。2025 年 11 月 13 日之後，您將無法再存取 Elastic Transcoder 主控台或 Elastic Transcoder 資源。

如需轉換至 的詳細資訊 AWS Elemental MediaConvert，請造訪此[部落格文章](https://aws.amazon.com/blogs/media/how-to-migrate-workflows-from-amazon-elastic-transcoder-to-aws-elemental-mediaconvert/)。

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

# 處理 Elastic Transcoder 中的錯誤
<a name="error-handling"></a>

**Topics**
+ [API 錯誤代碼 (用戶端和伺服器錯誤)](#api-error-codes)
+ [處理任務時發生錯誤](#job-processing-errors)
+ [截獲錯誤](#catching-errors)
+ [錯誤重試和指數退避](#api-retries)

當您傳送請求至 Elastic Transcoder API 並從中取得回應時，您可能會遇到兩種類型的 API 錯誤：
+ **用戶端錯誤：**用戶端錯誤是以 4xx HTTP 回應代碼表示。用戶端錯誤表示 Elastic Transcoder 發現用戶端請求有問題，例如身分驗證失敗或缺少必要的參數。您必須先修正用戶端應用程式中的問題，再重新提交請求。
+ **伺服器錯誤：**伺服器錯誤是以 5xx HTTP 回應代碼表示，且須由 Amazon 解決。您可以重新提交/重試請求，直到成功為止。

對於每個 API 錯誤，Elastic Transcoder 會傳回下列值：
+ 狀態代碼 (例如 `400`)
+ 錯誤代碼 (例如 `ValidationException`)
+ 錯誤訊息 (例如 `Supplied AttributeValue is empty, must contain exactly one of the supported datatypes`)

如需 Elastic Transcoder 針對用戶端和伺服器錯誤傳回的錯誤碼清單，請參閱 [API 錯誤代碼 (用戶端和伺服器錯誤)](#api-error-codes)。

此外，Elastic Transcoder 正在處理您的任務時，您可能會遇到錯誤。如需詳細資訊，請參閱[處理任務時發生錯誤](#job-processing-errors)。

## API 錯誤代碼 (用戶端和伺服器錯誤)
<a name="api-error-codes"></a>

HTTP 狀態代碼表示操作是否成功。

`200` 回應代碼表示操作成功。其他錯誤代碼表示用戶端錯誤 (4xx) 或伺服器錯誤 (5xx)。

下表列出 Elastic Transcoder 傳回的錯誤。有些錯誤只需您重試相同的請求即可解決。表中指出哪些錯誤可能在連續重試後解決。如果 Retry (重試) 欄位的值為：
+ **Yes (是)：**重新提交相同的請求。
+ **No (否)：**先修正用戶端的問題，再提交新的請求。

如需重試請求的詳細資訊，請參閱[錯誤重試和指數退避](#api-retries)。


| HTTP 狀態碼 | 錯誤碼 | 訊息 | 原因 | 重試 | 
| --- | --- | --- | --- | --- | 
| 400 | 條件式檢查失敗例外 | 條件式請求失敗。 | 範例：預期值與系統中存放的不符。 | 否 | 
| 400 | 簽章不完整例外 | 請求簽章未符合 AWS 標準。 | 請求中的簽章未包含所有必要元件。請參閱 [HTTP 標頭內容](making-http-requests.md#http-request-header)。 | 否 | 
| 403 | 缺少身分驗證權杖例外 | 請求必須包含有效 (已註冊) 的 AWS 存取金鑰 ID。 | 請求未包含所需的 x-amz-security-token。請參閱 [向 Elastic Transcoder 提出 HTTP 請求](making-http-requests.md)。 | 否 | 
| 400 | 驗證例外 | 多種。 | 請求中一或多個值缺少或無效；例如，值為空白或是大於有效值上限。 | 否 | 
| 403 | 存取遭拒例外 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elastictranscoder/latest/developerguide/error-handling.html)  |  您嘗試刪除系統預設集、Elastic Transcoder API 呼叫中的簽章無效，或使用者未獲授權執行操作。  | 否 | 
| 404 | 找不到資源例外  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elastictranscoder/latest/developerguide/error-handling.html)  | 範例：您嘗試增加任務的管道不存在或仍在建立中。 | 否 | 
| 409 | 資源正在使用中例外 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elastictranscoder/latest/developerguide/error-handling.html)  | 範例：您嘗試正在使用中的管道。 | 否 | 
| 429 | 超出限制例外  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elastictranscoder/latest/developerguide/error-handling.html)  | 目前的 AWS 帳戶已超過 Elastic Transcoder 物件的限制。如需詳細資訊，請參閱[Elastic Transcoder 管道、任務和預設集的數量限制](limits.md)。 |  | 
| 429 | 超出佈建的傳輸量例外 | 您已超出允許的佈建傳輸量上限。 |  範例：您的請求率太高。Elastic Transcoder 的 AWS SDKs會自動重試收到此例外狀況的請求。除非您的重試佇列太大而無法完成，否則您的請求最後會成功。減少請求的頻率。如需詳細資訊，請參閱[錯誤重試和指數退避](#api-retries)。 如果您透過輪詢來判斷請求的狀態，請考慮使用通知來判斷狀態。如需詳細資訊，請參閱「[任務狀態通知](notifications.md)」。  | 是 | 
| 429 | 調節例外 | 請求率超過允許的輸送。 |  您提交請求 (例如建立新任務的請求) 的速度太快。 如果您透過輪詢來判斷請求的狀態，請考慮使用通知來判斷狀態。如需詳細資訊，請參閱「[任務狀態通知](notifications.md)」。  | 是 | 
| 500 | 內部錯誤 | 伺服器在嘗試滿足請求時發生內部錯誤。 | 伺服器在處理您的請求時發生錯誤。 | 是 | 
| 500 | 內部伺服器錯誤 | 伺服器在嘗試滿足請求時發生內部錯誤。 | 伺服器在處理您的請求時發生錯誤。 | 是 | 
| 500 | 內部服務例外 |  | 服務在嘗試滿足請求時發生意外的例外。 | 是 | 
| 500 | 服務無法使用例外  | 服務目前無法使用或是繁忙中。 | 在處理您的請求時，伺服器發生意外錯誤。 | 是 | 

### 錯誤回應範例
<a name="sample-http-error-response"></a>

以下 HTTP 回應表示 `inputBucket` 的值為 null (非有效的值)。

```
HTTP/1.1 400 Bad Request
x-amzn-RequestId: b0e91dc8-3807-11e2-83c6-5912bf8ad066
x-amzn-ErrorType: ValidationException
Content-Type: application/json
Content-Length: 124
Date: Mon, 26 Nov 2012 20:27:25 GMT

{"message":"1 validation error detected: Value null at 'inputBucket' failed to satisfy constraint: Member must not be null"}
```

## 處理任務時發生錯誤
<a name="job-processing-errors"></a>

當 Elastic Transcoder 在處理任務時遇到錯誤，它會以兩種方式報告錯誤：
+ **任務狀態和輸出狀態：**Elastic Transcoder 會將失敗輸出的`Job:Status`物件和`Outputs:Status`物件設定為 `Error`。此外，Elastic Transcoder 會將失敗輸出的 `Outputs:StatusDetail` JSON 物件設定為說明失敗的值。
+ **SNS 通知：**如果您設定管道在 Elastic Transcoder 在處理期間遇到錯誤時傳送 SNS 通知，Elastic Transcoder 會以下列格式在通知中包含 JSON 物件：

  ```
  {
     "state" : "PROGRESSING|COMPLETED|WARNING|ERROR",
     "errorCode" : "the code of any error that occurred",
     "messageDetails" : "the notification message you created in Amazon SNS",
     "version" : "API version that you used to create the job",
     "jobId" : "value of Job:Id object that Elastic Transcoder 
               returns in the response to a Create Job request",
     "pipelineId" : "value of PipelineId object 
                    in the Create Job request",
     "input" : {
        job Input settings
     },
     "outputKeyPrefix" : "prefix for file names in Amazon S3 bucket",
     "outputs": [
        {
           applicable job Outputs settings,
           "status" : "Progressing|Complete|Warning|Error"
        },
        {...}
     ],
     "playlists": [
        {
           applicable job playlists settings
        }
     ],
     "userMetadata": {
        "metadata key": "metadata value"
     }
  }
  ```


| `errorCode`的值 | `messageDetails`的值 | 原因 | 
| --- | --- | --- | 
| 1000 | 驗證錯誤 | 處理任務時，Elastic Transcoder 判斷請求中的一或多個值無效。 | 
| 1001 | 相依性錯誤 | Elastic Transcoder 無法產生播放清單，因為它遇到一或多個播放清單相依性的錯誤。 | 
| 2000 | 無法擔任角色 | Elastic Transcoder 無法擔任此任務管道中Role物件中指定的 AWS Identity and Access Management 角色。 | 
| 3000 | 未分類的儲存錯誤 |  | 
| 3001 | 輸入不存在 | 不存在具有您在此任務 Input:Key 物件中所指定名稱的檔案。檔案必須存在於 Amazon S3 儲存貯體中，該儲存貯體在此任務管道的 InputBucket 物件中指定。 | 
| 3002 | 輸出已存在 | 已存在具有您在此任務 Outputs:Key (或 Output:Key) 物件中所指定名稱的檔案。檔案不能存在於此任務管道中OutputBucket物件中指定的 Amazon S3 儲存貯體中。 | 
| 3003 | 沒有讀取權限 | 您用於此任務之管道中Role物件中指定的 IAM 角色，沒有從包含您要轉碼之檔案的 Amazon S3 儲存貯體讀取的許可。 | 
| 3004 | 沒有寫入權限 | 您用於此任務之管道中Role物件中指定的 IAM 角色，沒有寫入您要儲存轉碼檔案或縮圖檔案之 Amazon S3 儲存貯體的許可。 | 
| 3005 | 儲存貯體不存在 | 指定的 S3 儲存貯體不存在： bucket=\$11\$1。 | 
| 3006 | 沒有寫入權限 | Elastic Transcoder 無法將 key=\$11\$1 寫入 bucket=\$12\$1，因為金鑰不在與儲存貯體相同的區域中 | 
| 4000 | 錯誤的輸入檔案 | 您在此任務的 Input:Key 物件中指定的檔案格式目前不受 Elastic Transcoder 支援。 | 
| 4001 | 錯誤的輸入檔案 | 您在此任務的 Input:Key 物件中指定的檔案寬度 x 高度，超過允許的寬度 x 高度上限。 | 
| 4002 | 錯誤的輸入檔案 | 您在此任務的 Input:Key 物件中指定的檔案大小，超過允許的大小上限。 | 
| 4003 | 錯誤的輸入檔案 | Elastic Transcoder 無法解譯您在此任務的其中一個Outputs:Watermarks:InputKey物件中指定的檔案。 | 
| 4004 | 錯誤的輸入檔案 | 您在此任務的其中一個 Outputs:Watermarks:InputKey 物件中指定的檔案寬度 x 高度，超過允許的寬度 x 高度上限。 | 
| 4005 | 錯誤的輸入檔案 | 您為其中一個 \$11\$1 物件指定的檔案大小超過允許的大小上限： bucket=\$12\$1， key=\$13\$1， size\$14\$1， max size=\$15\$1。 | 
| 4006 | 錯誤的輸入檔案 | Elastic Transcoder 無法轉碼輸入檔案，因為不支援 格式。 | 
| 4007 | 未處理的輸入檔案 | Elastic Transcoder 遇到一般支援的檔案類型，但無法正確處理檔案。此錯誤會自動開啟支援案例，我們已開始研究問題的原因。 | 
| 4008 | 錯誤的輸入檔案 |  潛在原因是預設集和輸入檔案不相符。範例包括： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/elastictranscoder/latest/developerguide/error-handling.html)  | 
| 4009 | 錯誤的輸入檔案 | Elastic Transcoder 無法將所有相簿藝術插入輸出檔案，因為您超過了藝術串流的最大數量。 | 
| 4010 | 錯誤的輸入檔案 | Elastic Transcoder 無法解譯您為 指定的圖形檔案AlbumArt:Artwork:InputKey。 | 
| 4011 | 錯誤的輸入檔案 | Elastic Transcoder 偵測到內嵌的插圖串流，但無法解譯。 | 
| 4012 | 錯誤的輸入檔案 | 您為 AlbumArt:Artwork 指定的影像，超過允許的寬度 x 高度上限：4096 x 3072。 | 
| 4013 | 錯誤的輸入檔案 | 內嵌專輯封面的寬度 x 高度，超過允許的寬度 x 高度上限：4096 x 3072。 | 
| 4014 | 錯誤的輸入 | 您為剪輯的開始時間指定的值在輸入檔案的結尾之後。Elastic Transcoder 無法建立輸出檔案。 | 
| 4015 | 錯誤的輸入 | Elastic Transcoder 無法產生資訊清單檔案，因為產生的區段不相符。 | 
| 4016 | 錯誤的輸入 | Elastic Transcoder 無法使用 \$12\$1 從 \$11\$1 解密輸入檔案。 | 
| 4017 | 錯誤的輸入 | AES 金鑰已使用 \$12\$1 位元加密金鑰進行加密。AES 僅支援 128、192 和 256 位元的加密金鑰。MD5=\$11\$1。 | 
| 4018 | 錯誤的輸入 | Elastic Transcoder 無法使用 MD5=\$11\$1 解密加密的金鑰 | 
| 4019 | 錯誤的輸入 | Elastic Transcoder 無法使用 KMS 金鑰 ARN \$10\$1 產生資料金鑰。 | 
| 4020 | 錯誤的輸入 | 進行 AES-128 加密時，您的金鑰必須為 128 位元。MD5=\$11\$1，\$12\$1 位元。 | 
| 4021 | 錯誤的輸入 | 針對 PlayReady DRM，您的金鑰必須為 128 位元。MD5=\$11\$1，強度=\$12\$1 位元。 | 
| 4022 | 錯誤的輸入 | \$11\$1 指定媒體檔案的合併大小超過允許的大小上限：daket=\$12\$1， size=\$13\$1。 | 
| 4023 | 錯誤的輸入 | 為串連指定的 \$11\$1 輸入檔案不會建立具有指定預設集一致解析度的輸出。您可以使用具有不同 PaddingPolicy、SizingPolicy、MaxWidth 和 MaxHeight 設定的預設集。 | 
| 4024 | 錯誤的輸入 | 為串連指定的 \$11\$1 輸入檔案不會建立具有指定預設集一致解析度的縮圖。您可以使用具有不同 PaddingPolicy、SizingPolicy、MaxWidth 和 MaxHeight 設定的縮圖。 | 
| 4025 | 錯誤的輸入 | 至少一個媒體檔案 （輸入 \$1\$11\$1) 與其他檔案不相符。所有媒體檔案都必須包含影片或不包含影片。 | 
| 4026 | 錯誤的輸入 | 至少一個媒體檔案 （輸入 \$1\$11\$1) 與其他檔案不相符。所有媒體檔案都必須包含音訊或不包含音訊。 | 
| 4100 | 錯誤的輸入檔案 | Elastic Transcoder 偵測到內嵌字幕軌跡，但無法解譯。 | 
| 4101 | 錯誤的輸入檔案 | Elastic Transcoder 無法解譯 Amazon S3 儲存貯體 = \$11\$1、key = \$12\$1 的指定字幕檔案。 | 
| 4102 | 錯誤的輸入檔案 | Elastic Transcoder 無法解譯指定的字幕檔案，因為它不是 UTF-8 編碼：Amazon S3 儲存貯體=\$11\$1，金鑰=\$12\$1。 | 
| 4103 | 錯誤的輸入檔案 | Elastic Transcoder 無法處理所有字幕音軌，因為您超過 \$11\$1，字幕音軌的數量上限。 | 
| 4104 | 錯誤的輸入檔案 | Elastic Transcoder 無法產生主播放清單，因為當上限為 4 時，所需的輸出包含 \$11\$1 個內嵌字幕。 | 
| 4105 | 錯誤的輸入檔案 | Elastic Transcoder 無法內嵌您的字幕軌跡，因為 CEA-708 不支援影格速率 \$11\$1 - 僅支援影格速率 【29.97， 30】。 | 
| 4106 | 錯誤的輸入檔案 | Elastic Transcoder 無法內嵌您的字幕軌跡，因為格式 \$11\$1 僅支援 \$12\$1 字幕軌跡 (s)。 | 
| 9000 | 內部服務錯誤 |  | 
| 9001 | 內部服務錯誤 |  | 
| 9999 | 內部服務錯誤 |  | 

## 截獲錯誤
<a name="catching-errors"></a>

為使您的應用程式能夠順暢執行，您需要內建邏輯來截獲並回應錯誤。典型的方法是在 `try` 區塊或 `if-then` 陳述式內實作您的請求。

AWS 開發套件會執行自己的重試和錯誤檢查。如果您在使用其中一個 AWS 開發套件時發生錯誤，則會看到錯誤代碼和說明。您也會看到 `Request ID` 值。該`Request ID`值有助於對 Elastic Transcoder 支援的問題進行故障診斷。

以下範例使用適用於 Java 的 AWS 開發套件來刪除 `try` 區塊內的一個項目，並使用 `catch` 區塊來回應錯誤。在這種情況下，它會警告請求失敗。該範例使用 `AmazonServiceException` 類別來擷取有關任何操作錯誤的資訊，包括 `Request ID`。該範例還使用 `AmazonClientException` 類別，以防是因為其他原因導致請求不成功。

```
try {
   DeleteJobRequest request = new DeleteJobRequest(jobId);
   DeleteJobResult result = ET.deleteJob(request);
   System.out.println("Result: " + result);
   // Get error information from the service while trying to run the operation	
   }  catch (AmazonServiceException ase) {
      System.err.println("Failed to delete job " + jobId);
      // Get specific error information
      System.out.println("Error Message:    " + ase.getMessage());
      System.out.println("HTTP Status Code: " + ase.getStatusCode());
      System.out.println("AWS Error Code:   " + ase.getErrorCode());
      System.out.println("Error Type:       " + ase.getErrorType());
      System.out.println("Request ID:       " + ase.getRequestId());
   // Get information in case the operation is not successful for other reasons	
   }  catch (AmazonClientException ace) {
      System.out.println("Caught an AmazonClientException, which means"+
      " the client encountered " +
      "an internal error while trying to " +
      "communicate with Elastic Transcoder, " +
      "such as not being able to access the network.");
      System.out.println("Error Message: " + ace.getMessage());
   }
```

## 錯誤重試和指數退避
<a name="api-retries"></a>

網路上有許多元件 (例如 DNS 伺服器、交換器、負載平衡器和其他項目) 可以在指定請求之生命週期中的任何階段產生錯誤。

一般在網路環境中處理這些錯誤回應的技術，就是在用戶端應用程式中實作重試。此技術可以提高應用程式的可靠性，並降低開發人員的營運成本。

每個支援 Elastic Transcoder 的 AWS 開發套件都會實作自動重試邏輯。適用於 Java 的 AWS 開發套件會自動重試請求，而且您可以使用 `ClientConfiguration` 類別進行重試設定。例如，在某些情況下，網頁以最低延遲發出請求且不允許重試，您可能會想要關閉重試邏輯。使用 `ClientConfiguration` 類別並提供 `maxErrorRetry` 價值 `0`，即可關閉重試。

如果您不要使用 AWS 開發套件，則應該重試收到伺服器錯誤 (5xx) 的原始請求。不過，用戶端錯誤 (4xx，非 `ThrottlingException` 或 `ProvisionedThroughputExceededException`) 指出您需要先修訂請求本身更正問題，然後再試一次。

**注意**  
如果您要輪詢以判斷請求的狀態，而且 Elastic Transcoder 傳回 HTTP 狀態碼 429 且錯誤碼為 `Provisioned Throughput Exceeded Exception`或 `Throttling Exception`，請考慮使用通知而非輪詢來判斷狀態。如需詳細資訊，請參閱[任務狀態通知](notifications.md)。

除了簡單的重試，建議採用指數退避演算法，以獲得更佳的流程控制。指數退避的背後概念是，對於連續錯誤回應，讓重試之間的等待時間漸進拉長。例如，您可以經過 1 秒再進行第一次重試，經過 4 秒再進行第二次重試，經過 16 秒再進行第三次重試，以此類推。不過，在一分鐘之後，如果請求未成功，則問題可能是硬性限制，而不是請求率。例如，您可能已達到所允許的管道數量上限。設定大約一分鐘停止的最大重試次數。

以下是展示重試邏輯的工作流程。工作流程邏輯首先會判斷錯誤是否為伺服器錯誤 (5xx)。接著，如果錯誤是伺服器錯誤，代碼會重試原始請求。

```
currentRetry = 0
DO
  set retry to false

  execute Elastic Transcoder request

  IF Exception.errorCode = ProvisionedThroughputExceededException
    set retry to true
  ELSE IF Exception.httpStatusCode = 500
    set retry to true
  ELSE IF Exception.httpStatusCode = 400
    set retry to false 
    fix client error (4xx)

  IF retry = true  
    wait for (2^currentRetry * 50) milliseconds
    currentRetry = currentRetry + 1

WHILE (retry = true AND currentRetry < MaxNumberOfRetries)  // limit retries
```