エラー処理 - Amazon Rekognition

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

エラー処理

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

エラーコンポーネント

プログラムがリクエストを送信すると、 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."}

エラーメッセージおよびコード

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

HTTP ステータスコード 400

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

AccessDeniedException

メッセージ: <Operation> オペレーションを呼び出すときにエラー (AccessDeniedException) が発生しました。ユーザー: <User ARN> には <Operation> をリソース: <Resource ARN> で実行する権限がありません

そのアクションを実行する権限がありません。そのオペレーションを実行するには、承認されたユーザーまたは IAM ロールの Amazon リソースネーム (ARN) を使用します。

再試行してもいいですか。No

GroupFacesInProgressException

メッセージ : ジョブのスケジューリングに失敗しました。このコレクションには既存のグループフェイスジョブがあります。

既存のジョブの完了後にオペレーションを再試行します。

再試行してもいいですか。No

IdempotentParameterMismatchException

メッセージ: 指定した ClientRequestToken: <Token> は既に使用されています。

ClientRequestToken 入力パラメータがオペレーションに再利用されましたが、他の入力パラメータの少なくとも 1 つが、オペレーションに対する前回の呼び出しとは異なります。

再試行してもいいですか。No

ImageTooLargeException

メッセージ: イメージサイズが大きすぎます

入力イメージサイズが制限文字数を超えています。DetectProtectiveEquipment を呼び出しているとき、イメージサイズまたは解像度の許容値を超えています。詳細については、「Amazon Rekognition のガイドラインとクォータ」を参照してください。

再試行してもいいですか。No

InvalidImageFormatException

メッセージ: リクエストに無効なイメージ形式があります

指定されたイメージ形式はサポートされていません。サポートされているイメージ形式 (.JPEG および .PNG) を使用します。詳細については、「Amazon Rekognition のガイドラインとクォータ」を参照してください。

再試行してもいいですか。No

InvalidPaginationTokenException

メッセージ

  • トークンが無効です

  • ページ分割トークンが無効です

リクエストのページ分割トークンが有効ではありません。トークンの有効期限が切れている可能性があります。

再試行してもいいですか。No

InvalidParameterException

メッセージ: リクエストに無効なパラメータがあります

入力パラメータが制約に違反しています。API オペレーションを再度呼び出す前にパラメータを検証します。

再試行してもいいですか。No

InvalidS3ObjectException

メッセージ:

  • リクエストに無効な S3 オブジェクトがあります

  • S3 からオブジェクトのメタデータを取得できません。オブジェクトキー、リージョン、またはアクセス権限を確認します。

Amazon Rekognition は、リクエストで指定された S3 オブジェクトにアクセスできません。詳細については、「S3 へのアクセスの設定: AWS S3 へのアクセスの管理」を参照してください。トラブルシューティング情報については、「Amazon S3 のトラブルシューティング」を参照してください。

再試行してもいいですか。No

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 サービスの制限」を参照してください。

制限の拡大をリクエストするには、TPS クォータを変更するケースを作成する で次の指示に従ってください。

再試行してもいいですか。Yes

ResourceAlreadyExistsException

メッセージ: コレクション id: <Collection Id> はすでに存在しています

指定された ID の付いたコレクションはすでに存在しています。

再試行してもいいですか。No

ResourceInUseException

メッセージ:

  • ストリームプロセッサの名前はすでに使用されています

  • 指定されたリソースは使用中です

  • ストリームを停止するためにプロセッサを利用できません

  • ストリームプロセッサを削除できません

リソースが利用可能になったらオペレーションを再試行します。

再試行してもいいですか。いいえ

ResourceNotFoundException

メッセージ: API コールに応じたさまざまなメッセージ。

指定されたリソースは存在しません。

再試行してもいいですか。いいえ

ThrottlingException

メッセージ: リクエストのレートが急激に増加しました。レートを下げてください。

リクエストの増加レートが速すぎます。リクエストレートを下げてから、徐々に引き上げます。エクスポネンシャルバックオフを実行してリクエストを再試行することをお勧めします。AWS SDK には、デフォルトで自動再試行ロジックとエクスポネンシャルバックオフが使用されています。詳細については、「AWS でのエラー時の再試行とエクスポネンシャルバックオフ」および「エクスポネンシャルバックオフとジッタ」を参照してください。

再試行してもいいですか。Yes

VideoTooLargeException

メッセージ: ビデオサイズ: <Video Size> バイトが、最大制限: <Max Size> バイトを上回っています。

指定されたメディアのファイルサイズが大きすぎるか、時間が長すぎます。詳細については、「Amazon Rekognition のガイドラインとクォータ」を参照してください。

再試行してもいいですか。いいえ

HTTP ステータスコード 5xx

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

InternalServerError (HTTP 500)

メッセージ: 内部サーバーエラー

Amazon Rekognition でサービスの問題が発生しました。もう一度やり直してください。エクスポネンシャルバックオフを実行し、リクエストを再試行します。AWS SDK には、デフォルトで自動再試行ロジックとエクスポネンシャルバックオフが使用されています。詳細については、「AWS でのエラー時の再試行とエクスポネンシャルバックオフ」および「エクスポネンシャルバックオフとジッタ」を参照してください。

再試行してもいいですか。Yes

ThrottlingException (HTTP 500)

メッセージ: サービスが使用できません

Amazon Rekognition は一時的にリクエストを処理できませんでした。もう一度やり直してください。エクスポネンシャルバックオフを実行してリクエストを再試行することをお勧めします。AWS SDK には、デフォルトで自動再試行ロジックとエクスポネンシャルバックオフが使用されています。詳細については、「AWS でのエラー時の再試行とエクスポネンシャルバックオフ」および「エクスポネンシャルバックオフとジッタ」を参照してください。

再試行してもいいですか。はい

アプリケーションのエラー処理

アプリケーションをスムーズに実行するには、エラーをキャッチしエラーに対応するロジックを組み込む必要があります。一般的な方法には、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 クライアントがサービスからのレスポンスを取得または解析できなかった場合に、この例外が発生します。