本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
本節說明執行時間錯誤和其處理方式。同時也說明 Amazon Rekognition 特有的錯誤訊息和代碼。
錯誤元件
當您的程式傳送請求時,Amazon Rekognition 會嘗試處理該請求。如果要求成功,亞馬遜會傳回 HTTP 成功狀態碼 (200 OK
),以及要求作業的結果。
如果請求不成功,Amazon Rekognition 會傳回錯誤訊息。每個錯誤都會有三個元件:
-
HTTP 狀態碼 (例如
400
)。 -
例外狀況名稱 (例如
InvalidS3ObjectException
)。 -
錯誤訊息 (例如
Unable to get object metadata from S3. Check object key, region and/or access permissions.
)。
AWS 開發套件會負責將錯誤傳播至應用程式,讓您可以採取適當的動作。例如,在 Java 程式中,您可以撰寫 try-catch
邏輯來處理 ResourceNotFoundException
。
如果您不使用 AWS 開發套件,則需要剖析來自 Amazon Rekognition 的低階回應內容。以下是這類回應的範例:
HTTP/1.1 400 Bad Request
Content-Type: application/x-amz-json-1.1
Date: Sat, 25 May 2019 00:28:25 GMT
x-amzn-RequestId: 03507c9b-7e84-11e9-9ad1-854a4567eb71
Content-Length: 222
Connection: keep-alive
{"__type":"InvalidS3ObjectException","Code":"InvalidS3ObjectException","Logref":"5022229e-7e48-11e9-9ad1-854a4567eb71","Message":"Unable to get object metadata from S3. Check object key, region and/or access permissions."}
錯誤訊息和錯誤碼
以下是 Amazon Rekognition 傳回的例外狀況清單,依 HTTP 狀態碼分組。確定要重試嗎?為是,則可以重新提交相同的請求。確定要重試嗎?為否,則需要先修正用戶端上的問題,再提交新的請求。
HTTP 狀態碼 400
HTTP 400
狀態碼表示您的請求有問題。問題的一些範例為驗證失敗、遺失的必要參數,或是超過作業的佈建輸送量。您必須先修正應用程式中的問題,再重新提交請求。
- AccessDeniedException
-
訊息:發生錯誤 (AccessDeniedException) 呼叫<Operation>作業時:User: <User ARN>未授權在<Operation>資源上執行:<Resource ARN>。
您未獲授權執行動作。使用已獲授權之使用者或 IAM 角色的 Amazon Resource Name (ARN) 來執行操作。
OK to retry? (確定要重試嗎?) 否
- GroupFacesInProgressException
-
訊息:排程失敗GroupFaces工作。此集合有一個現有的組面工作。
請在現有任務完成後重試操作。
OK to retry? (確定要重試嗎?) 否
- IdempotentParameterMismatchException
-
訊息:該ClientRequestToken:<Token>您提供的已經在使用中。
一個ClientRequestTokeninput 參數已與作業一起重複使用,但至少有一個其他輸入參數與上一次呼叫作業不同。
OK to retry? (確定要重試嗎?) 否
- ImageTooLargeException
-
訊息:影像大小太大。
輸入影像大小超過允許的限制。如果你打電話DetectProtectiveEquipment,影像大小或解析度超過允許的限制。如需詳細資訊,請參閱Amazon Rekognition 中的準則和配額。
OK to retry? (確定要重試嗎?) 否
- InvalidImageFormatException
-
訊息:請求的影像格式無效。
不支援所提供的影像格式。請使用支援的影像格式 (.JPEG 和 .PNG)。如需詳細資訊,請參閱Amazon Rekognition 中的準則和配額。
OK to retry? (確定要重試嗎?) 否
- InvalidPaginationTokenException
-
訊息
無效的字符
無效的分頁符記
請求中的分頁符記無效。符記可能已過期。
OK to retry? (確定要重試嗎?) 否
- InvalidParameterException
-
訊息:請求有無效的參數。
輸入參數違反限制。請驗證您的參數,然後再次呼叫 API 操作。
OK to retry? (確定要重試嗎?) 否
- 無效 3ObjectException
-
訊息:
請求有無效的 S3 物件。
無法從 S3 取得物件中繼資料。檢查物件金鑰、地區和/或存取權限。
亞馬遜重新認知無法存取請求中指定的 S3 物件。如需詳細資訊,請參閱設定對 S3 的存取:AWS S3 管理存取。如需故障診斷資訊,請參閱故障診斷 Amazon S3。
OK to retry? (確定要重試嗎?) 否
- LimitExceededException
訊息:
超出帳戶的串流處理器限制,限制 - <目前限制>。
<開啟任務數> 開啟任務,適用於使用者 <使用者 ARN> 最大限制:<最大限制>
超出亞馬遜重新認知服務限制。例如,如果您同時啟動太多 Amazon Rekognition 視訊任務,請呼叫啟動作業,例如
StartLabelDetection
,提高一個LimitExceededException
例外狀況 (HTTP 狀態碼:400),直到同時執行的任務數目低於 Amazon 重新認知服務限制為止。OK to retry? (確定要重試嗎?) 否
- ProvisionedThroughputExceededException
-
訊息:
超過佈建率。
超過 S3 下載限制。
請求數超過您的傳輸量限制。如需詳細資訊,請參閱〈亞馬遜重新認知服務限制。
要請求提高限制,請按照以下說明進行操作:建立案例以變更 TPS 配額。
OK to retry? (確定要重試嗎?) 是
- ResourceAlreadyExistsException
-
訊息:集合 ID:<集合 ID> 已存在。
已存在使用指定 ID 的集合。
OK to retry? (確定要重試嗎?) 否
- ResourceInUseException
-
訊息:
串流處理器名稱已在使用中。
指定的資源已在使用中。
處理器無法用於停止串流。
無法刪除串流處理器。
當資源可用時重試。
OK to retry? (確定要重試嗎?) 否
- ResourceNotFoundException
-
訊息:根據 API 呼叫的不同訊息。
指定的資源不存在。
OK to retry? (確定要重試嗎?) 否
- ThrottlingException
-
訊息:減慢;請求率突然增加。
您的請求率增加過快。請減慢並逐漸增加您的請求率。我們建議您以指數方式退避並再試一次。依預設,AWS 開發套件會使用自動重試邏輯和指數退避。如需詳細資訊,請參閱在 AWS 中錯誤重試與指數退避和指數退避和抖動
。 OK to retry? (確定要重試嗎?) 是
- VideoTooLargeException
-
訊息:影片大小 (位元組):<影片大小> 超過最大限制:<最大大小> 位元組。
所提供媒體的檔案大小或持續時間太大。如需詳細資訊,請參閱Amazon Rekognition 中的準則和配額。
OK to retry? (確定要重試嗎?) 否
HTTP 狀態碼 5xx
HTTP 5xx
狀態碼指出 AWS 必須解決的問題。這可能是暫時性錯誤。如果確實如此,您可以重試請求直到成功。否則,請前往 AWS 服務運作狀態儀表板
- InternalServerError(HTTP)
-
訊息:內部伺服器錯誤
Amazon Rekognition 發生服務問題。請再次嘗試呼叫。您應以指數方式退避,然後再試一次。依預設,AWS 開發套件會使用自動重試邏輯和指數退避。如需詳細資訊,請參閱在 AWS 中錯誤重試與指數退避和指數退避和抖動
。 OK to retry? (確定要重試嗎?) 是
- ThrottlingException(HTTP)
-
訊息:服務無法使用
Amazon Rekognition 暫時無法處理請求。請再次嘗試呼叫。我們建議您以指數方式退避並再試一次。依預設,AWS 開發套件會使用自動重試邏輯和指數退避。如需詳細資訊,請參閱在 AWS 中錯誤重試與指數退避和指數退避和抖動
。 OK to retry? (確定要重試嗎?) 是
應用程式中的錯誤處理
若要讓您的應用程式順暢執行,您需要新增邏輯來截獲並回應錯誤。一般方式包含使用 try-catch
區塊或 if-then
陳述式。
AWS 開發套件會執行自己的重試和錯誤檢查。如果您在使用其中一個 AWS 開發套件時發生錯誤,則錯誤碼和說明可以協助您對其進行故障診斷。
您應該也會在回應中看到 Request ID
。如果您需要與 AWS Support 合作來診斷問題,則 Request
ID
可能十分有用。
以下 Java 程式碼片段嘗試偵測影像中的物件,並執行早期錯誤處理。(在此情況下,它只會通知請求失敗的使用者。)
try {
DetectLabelsResult result = rekognitionClient.detectLabels(request);
List <Label> labels = result.getLabels();
System.out.println("Detected labels for " + photo);
for (Label label: labels) {
System.out.println(label.getName() + ": " + label.getConfidence().toString());
}
}
catch(AmazonRekognitionException e) {
System.err.println("Could not complete operation");
System.err.println("Error Message: " + e.getMessage());
System.err.println("HTTP Status: " + e.getStatusCode());
System.err.println("AWS Error Code: " + e.getErrorCode());
System.err.println("Error Type: " + e.getErrorType());
System.err.println("Request ID: " + e.getRequestId());
}
catch (AmazonClientException ace) {
System.err.println("Internal error occurred communicating with Rekognition");
System.out.println("Error Message: " + ace.getMessage());
}
在此程式碼片段中,try-catch
建構會處理兩個不同類型的例外狀況:
-
AmazonRekognitionException
— 如果用戶端請求已正確傳輸至 Amazon Rekognition,但 Amazon Rekognition 無法處理請求並傳回錯誤回應,就會發生此例外狀況。 AmazonClientException
— 如果用戶端無法從服務取得回應,或者用戶端無法剖析服務的回應,就會發生此例外狀況。