

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# エラー処理
<a name="error-handling"></a>

 このセクションでは、ランタイムエラーとその処理方法について説明します。それは、同時に Amazon Rekognition に特有のエラーメッセージとコードについて説明します。

**Topics**
+ [エラーコンポーネント](#error-handling.Components)
+ [エラーメッセージおよびコード](#error-handling.MessagesAndCodes)
+ [アプリケーションのエラー処理](#error-handling.Handling)

## エラーコンポーネント
<a name="error-handling.Components"></a>

プログラムがリクエストを送信すると、 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 SDK によりアプリケーションにエラーが伝達されるため、適切なアクションを実行できます。たとえば、Java プログラムでは、 `try-catch` を処理する `ResourceNotFoundException` ロジックを記述できます。

AWS SDK を使用していない場合は、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."}
```

## エラーメッセージおよびコード
<a name="error-handling.MessagesAndCodes"></a>

Amazon Rekognition によって返される例外のリストを HTTP ステータスコードごとに以下に示します。*再試行してもいいですか*が*はい*であれば、同じリクエストを再度送信できます。*再試行してもいいですか*が*いいえ*であれば、新しいリクエストを送信する前に、クライアント側で問題を修正する必要があります。

### HTTP ステータスコード 400
<a name="error-handling.MessagesAndCodes.http400"></a>

HTTP `400` ステータスコードは、リクエストに問題があることを示しています。問題の例としては、認証の失敗、必須パラメータの不足、またはオペレーションのプロビジョンドスループットの超過などがあります。リクエストを再度送信する前に、アプリケーションで問題を修正する必要があります。

**AccessDeniedException **  
メッセージ: *<Operation> オペレーションを呼び出すときにエラー (AccessDeniedException) が発生しました。ユーザー: <User ARN> には <Operation> をリソース: <Resource ARN> で実行する権限がありません*  
そのアクションを実行する権限がありません。そのオペレーションを実行するには、承認されたユーザーまたは IAM ロールの Amazon リソースネーム (ARN) を使用します。  
再試行してもいいですか。いいえ

**GroupFacesInProgressException **  
メッセージ : * ジョブのスケジューリングに失敗しました。このコレクションには既存のグループフェイスジョブがあります。*  
既存のジョブの完了後にオペレーションを再試行します。  
再試行してもいいですか。いいえ

** IdempotentParameterMismatchException **  
メッセージ: *指定した ClientRequestToken: <Token> は既に使用されています。*  
ClientRequestToken 入力パラメータがオペレーションに再利用されましたが、他の入力パラメータの少なくとも 1 つが、オペレーションに対する前回の呼び出しとは異なります。  
再試行してもいいですか。いいえ

**ImageTooLargeException **  
メッセージ: *イメージサイズが大きすぎます*  
入力イメージサイズが制限文字数を超えています。[DetectProtectiveEquipment](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectProtectiveEquipment.html) を呼び出しているとき、イメージサイズまたは解像度の許容値を超えています。詳細については、「[Amazon Rekognition のガイドラインとクォータ](limits.md)」を参照してください。  
再試行してもいいですか。いいえ

**InvalidImageFormatException **  
メッセージ: *リクエストに無効なイメージ形式があります*  
指定されたイメージ形式はサポートされていません。サポートされているイメージ形式 (.JPEG および .PNG) を使用します。詳細については、「[Amazon Rekognition のガイドラインとクォータ](limits.md)」を参照してください。  
再試行してもいいですか。いいえ

**InvalidPaginationTokenException **  
 メッセージ  
+ *トークンが無効です*
+ *ページ分割トークンが無効です*
リクエストのページ分割トークンが有効ではありません。トークンの有効期限が切れている可能性があります。  
再試行してもいいですか。いいえ 

**InvalidParameterException **  
メッセージ: *リクエストに無効なパラメータがあります*  
入力パラメータが制約に違反しています。API オペレーションを再度呼び出す前にパラメータを検証します。  
再試行してもいいですか。いいえ

**InvalidS3ObjectException **  
メッセージ:   
+ *リクエストに無効な S3 オブジェクトがあります*
+ S3 からオブジェクトのメタデータを取得できません。オブジェクトキー、リージョン、またはアクセス権限を確認します。
Amazon Rekognition は、リクエストで指定された S3 オブジェクトにアクセスできません。詳細については、「[S3 へのアクセスの設定: AWS S3 へのアクセスの管理](https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html)」を参照してください。トラブルシューティング情報については、「[Amazon S3 のトラブルシューティング](https://docs.aws.amazon.com/AmazonS3/latest/dev/troubleshooting.html)」を参照してください。  
再試行してもいいですか。いいえ

**LimitExceededException **  
メッセージ:   
+ *アカウントに対するストリームプロセッサの制限 - <Current Limit> を超えました*
+ * ユーザー <User ARN> のオープンジョブの数 <Number of Open Jobs> の最大制限: <Maximum Limit>*
Amazon Rekognition サービスの制限を超えました。たとえば、多数の Amazon Rekognition Video ジョブを同時に開始する場合、オペレーションを開始する呼び出し (`StartLabelDetection` など) は、現在同時実行中のジョブ数が Amazon Rekognition のサービスの制限を下回るまで、`LimitExceededException` 例外 (HTTP ステータスコード : 400) を発生させます。  
再試行してもいいですか。いいえ

**ProvisionedThroughputExceededException **  
メッセージ:   
+ *プロビジョンドレートを超過しました*
+ *S3 ダウンロード制限を超えました*
お客様のスループット制限を超えたリクエストの数。詳細については、「[Amazon Rekognition サービスの制限](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_rekognition)」を参照してください。  
制限の拡大をリクエストするには、[TPS クォータを変更するケースを作成する](limits.md#quotas-create-case) で次の指示に従ってください。  
再試行してもいいですか。はい

**ResourceAlreadyExistsException **  
メッセージ: *コレクション id: <Collection Id> はすでに存在しています*  
 指定された ID の付いたコレクションはすでに存在しています。  
再試行してもいいですか。いいえ

**ResourceInUseException **  
メッセージ:   
+ *ストリームプロセッサの名前はすでに使用されています*
+ *指定されたリソースは使用中です*
+ *ストリームを停止するためにプロセッサを利用できません*
+ *ストリームプロセッサを削除できません*
リソースが利用可能になったらオペレーションを再試行します。  
再試行してもいいですか。いいえ

**ResourceNotFoundException **  
メッセージ: API コールに応じたさまざまなメッセージ。  
指定されたリソースは存在しません。  
再試行してもいいですか。いいえ

**ThrottlingException **  
メッセージ: *リクエストのレートが急激に増加しました。レートを下げてください。*  
リクエストの増加レートが速すぎます。リクエストレートを下げてから、徐々に引き上げます。エクスポネンシャルバックオフを実行してリクエストを再試行することをお勧めします。デフォルトでは、 AWS SDKs自動再試行ロジックとエクスポネンシャルバックオフを使用します。詳細については、「[AWS でのエラー時の再試行とエクスポネンシャルバックオフ](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)」および「[エクスポネンシャルバックオフとジッタ](http://www.awsarchitectureblog.com/2015/03/backoff.html)」を参照してください。  
再試行してもいいですか。はい

**VideoTooLargeException **  
メッセージ: *ビデオサイズ: <Video Size> バイトが、最大制限: <Max Size> バイトを上回っています。*  
指定されたメディアのファイルサイズが大きすぎるか、時間が長すぎます。詳細については、「[Amazon Rekognition のガイドラインとクォータ](limits.md)」を参照してください。  
再試行してもいいですか。いいえ

### HTTP ステータスコード 5xx
<a name="error-handling.MessagesAndCodes.http5xx"></a>

HTTP ステータスコード `5xx` は、 AWSで解決する必要のある問題を示しています。This might be a transient error。その場合、リクエストを再試行することで成功することがあります。それ以外の場合、サービスに運用上の問題があるかどうかを確認するために、[AWS Service Health Dashboard](https://status.aws.amazon.com/) を参照してください。

**InternalServerError (HTTP 500) **  
メッセージ: *内部サーバーエラー*  
Amazon Rekognition でサービスの問題が発生しました。もう一度やり直してください。エクスポネンシャルバックオフを実行し、リクエストを再試行します。 AWS SDK には、デフォルトで自動再試行ロジックとエクスポネンシャルバックオフが使用されています。詳細については、「[AWS でのエラー時の再試行とエクスポネンシャルバックオフ](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)」および「[エクスポネンシャルバックオフとジッタ](http://www.awsarchitectureblog.com/2015/03/backoff.html)」を参照してください。  
再試行してもいいですか。はい

**ThrottlingException (HTTP 500)**  
メッセージ: *サービスが使用できません*  
Amazon Rekognition は一時的にリクエストを処理できませんでした。もう一度やり直してください。エクスポネンシャルバックオフを実行してリクエストを再試行することをお勧めします。デフォルトでは、 AWS SDKs自動再試行ロジックとエクスポネンシャルバックオフを使用します。詳細については、「[AWS でのエラー時の再試行とエクスポネンシャルバックオフ](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)」および「[エクスポネンシャルバックオフとジッタ](http://www.awsarchitectureblog.com/2015/03/backoff.html)」を参照してください。  
再試行してもいいですか。はい

## アプリケーションのエラー処理
<a name="error-handling.Handling"></a>

アプリケーションをスムーズに実行するには、エラーをキャッチしエラーに対応するロジックを組み込む必要があります。一般的な方法には、`try-catch`ブロックや`if-then`ステートメントの使用などがあります。

AWS SDK は独自に再試行とエラーチェックを実行します。AWS SDK の使用中にエラーが発生した場合は、エラーコードと説明が問題のトラブルシューティングに役立ちます。

また、レスポンスに`Request ID`が表示されます。`Request ID`は、AWS Support を使用して問題を診断することが必要な場合に便利です。

以下の 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`の構成は 2 つの異なるタイプの例外を処理します。
+ `AmazonRekognitionException` クライアントリクエストが Amazon Rekognition に正しく送信されたが、 Amazon Rekognition がリクエストを処理できず、代わりにエラーレスポンスを返した場合に、この例外が発生します。
+ `AmazonClientException` クライアントがサービスからのレスポンスを取得または解析できなかった場合に、この例外が発生します。