Elastic Transcoder でのエラー処理 - Amazon Elastic Transcoder

でコストを節約し、より多くの機能を利用する AWS Elemental MediaConvert

MediaConvert は、包括的な高度なトランスコード機能スイートを提供する、より新しいファイルベースのビデオトランスコードサービスで、オンデマンド料金は 1 分あたり 0.0075 USD からとなります。もっと読む

既に Amazon Elastic Transcoder をご使用中ですか? への移行は簡単です MediaConvert。詳細については、移行プロセスに関する貴重な情報やその他のリソースへのリンクを記載した本概要を参照してください。

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

Elastic Transcoder でのエラー処理

リクエストを送信して Elastic Transcoder API からの応答を取得するとき、以下の 2 種類の 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 のエラーコード(クライアントエラーとサーバーエラー)」を参照してください。

さらに、Elastic Transcoder によるジョブの処理中にエラーが発生する場合があります。詳細については、「ジョブ処理中のエラー」を参照してください。

API のエラーコード(クライアントエラーとサーバーエラー)

HTTP ステータスコードは、特定のオペレーションが成功したかどうかを示しています。

応答コード 200 は、オペレーションが成功したことを示します。その他のエラーコードは、クライアントエラー(4xx)またはサーバーエラー(5xx)を示します。

以下の表に、Elastic Transcoder によって返されるエラーを示します。一部のエラーは、同じリクエストを再試行することで解決されます。この表は、連続的な再試行によって解決する可能性が高いエラーを示しています。[Retry (リトライ)] 列の値は次のことを示しています。

  • Yes: 同じリクエストを再び送信します。

  • No: 新しいリクエストの送信前にクライアント側で問題を解決します。

リクエストの再試行の詳細については、「エラーの再試行とエクスポネンシャルバックオフ」を参照してください。

HTTP ステータスコード エラーコード Message 原因 再試行
400 Conditional Check Failed Exception 条件付きリクエストが失敗しました。 例: 期待値がシステムに格納されている値に一致しませんでした。 No
400 Incomplete Signature Exception リクエストの署名が AWS 基準に適合しません。 リクエスト内の署名に、必要なすべての要素が含まれていませんでした。「HTTP ヘッダーの内容」を参照してください。 No
403 Missing Authentication Token Exception The request must contain a valid (registered) AWS Access Key ID。 必要な x-amz-security-token がリクエストに含まれていませんでした。「Elastic Transcoder に対する HTTP リクエストの作成」を参照してください。 No
400 Validation Exception 各種の値。 リクエストで 1 つ以上の値が見つからないか無効でした。たとえば、空の値があるか、最大許容の値よりも大きい値があります。 No
403 AccessDenied Exception
  • Deleting a system preset is not allowed: account=<accountId>, presetId=<presetId>。

  • 一般的な認証の失敗。クライアントがリクエストに正しく署名しませんでした。「リクエストへの署名」を参照してください。

システムプリセットを削除しようとしたか、Elastic Transcoder API 呼び出し時の署名が無効であったか、ユーザーにこのオペレーションの実行許可がありません。

No
404 ResourceNot Found Exception
  • The specified <resource> could not be found: <resourceId>。

  • The specified job was not found: account=<accountId>, jobId=<jobId>。

  • The specified pipeline was not found: account=<accountId>, pipelineId=<pipelineId>

  • The specified preset was not found: account=<accountId>, presetId=<presetId>

例: ジョブを追加しようとしているパイプラインが存在しないか、まだ作成中です。 No
409 Resource InUse Exception
  • The <resource> was already in use: accountId=<accountId>, resourceId=resourceId>。

  • The pipeline contains active jobs: account=<accountId>, pipeline=<pipelineId>。

例: 現在使用中のパイプラインを削除しようとしました。 No
429 Limit Exceeded Exception
  • The account already has the maximum number of pipelines allowed: account=<accountId>, maximum number of pipelines=<maximum>

  • The account already has the maximum number of presets allowed: account=<accountId>, maximum number of presets=<maximum>

  • The account already has the maximum number of jobs per pipeline in the backlog: account=<accountId>, maximum number of jobs in backlog for pipeline=<maximum>

現在の AWS アカウントが Elastic Transcoder オブジェクトの制限を超えました。詳細については、「Elastic Transcoder パイプライン、ジョブ、プリセットの数の制限」を参照してください。
429 Provisioned Throughput Exceeded Exception プロビジョニングされたスループットが許容されている最大値を超えました。

例: リクエストの頻度が多すぎます。Elastic Transcoder の AWS SDK は、この例外を受け取ったリクエストを自動的に再試行します。リクエストは最終的に成功しますが、再試行キューが大きすぎて終了しない場合もあります。リクエストの頻度を少なくしてください。詳細については、「エラーの再試行とエクスポネンシャルバックオフ」を参照してください。

ポーリングによりリクエストのステータスを調べている場合は、通知を使用してステータスを調べることを検討してください。詳細については、「ジョブのステータスの通知」を参照してください。

Yes
429 Throttling Exception リクエストの速度が、許容されているスループットを超えています。

リクエスト (新しいジョブの作成リクエストなど) の送信が速すぎます。

ポーリングによりリクエストのステータスを調べている場合は、通知を使用してステータスを調べることを検討してください。詳細については、「ジョブのステータスの通知」を参照してください。

Yes
500 内部エラー リクエストの処理中にサーバーで内部エラーが発生しました。 リクエストの処理中にサーバーでエラーが発生しました。 Yes
500 Internal Server Error リクエストの処理中にサーバーで内部エラーが発生しました。 リクエストの処理中にサーバーでエラーが発生しました。 Yes
500 Internal Service Exception リクエストの処理中にサーバーで予期せぬエラーが発生しました。 Yes
500 Service Unavailable Exception サービスが現在利用できないかビジー状態です。 リクエストの処理中にサーバーで予期しないエラーが発生しました。 Yes

エラー応答のサンプル

以下の 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"}

ジョブ処理中のエラー

ジョブの処理中に Elastic Transcoder でエラーが発生したときは、以下の 2 つの方法でエラーがレポートされます。

  • ジョブステータスと出力ステータス: 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 原因
1,000 検証エラー ジョブの処理中、Elastic Transcoder によってリクエスト内の 1 つ以上の値が無効であると判断されました。
1001 依存関係のエラー プレイリストの依存関係の 1 つ以上でエラーが発生したため、Elastic Transcoder はプレイリストを作成できませんでした。
2000 Cannot Assume Role このジョブのパイプラインの Role オブジェクトで指定した AWS Identity and Access Management ロールを Elastic Transcoder は推定できませんでした。
3000 Unclassified Storage Error
3001 Input Does Not Exist このジョブの Input:Key オブジェクトで指定した名前のファイルは存在しません。そのファイルは、このジョブのパイプラインの InputBucket オブジェクトで指定した Amazon S3 バケットに存在します。
3002 Output Already Exists このジョブの Outputs:Key(または Output:Key)オブジェクトで指定した名前のファイルはすでに存在します。そのファイルは、このジョブのパイプラインの OutputBucket オブジェクトで指定した Amazon S3 バケットに存在することはできません。
3003 Does Not Have Read Permission このジョブに使用したパイプラインの Role オブジェクトで指定した IAM ロールに、トランスコードするファイルを Amazon S3 バケットから読み取るためのアクセス許可がありません。
3004 Does Not Have Write Permission このジョブに使用したパイプラインの Role オブジェクトで指定した IAM ロールに、トランスコードしたファイルまたはサムネイルファイルを Amazon S3 バケットに書き込むためのアクセス許可がありません。
3005 Bucket Does Not Exist 指定された S3 バケットが存在しません: bucket={1}
3006 Does Not Have Write Permission キーがバケットと同じリージョンにないため、Elastic Transcoder では key={1} を bucket={2} に書き込むことができませんでした。
4000 Bad Input File このジョブの Input:Key オブジェクトで指定したファイルの形式は、Elastic Transcoder では現在サポートされていません。
4001 Bad Input File このジョブの Input:Key オブジェクトで指定したファイルの幅 x 高さが最大許容の幅 x 高さを超えています。
4002 Bad Input File このジョブの Input:Key オブジェクトで指定したファイルのサイズが最大許容のサイズを超えています。
4003 Bad Input File このジョブの Outputs:Watermarks:InputKey オブジェクトのいずれかで指定したファイルが Elastic Transcoder で解釈されませんでした。
4004 Bad Input File このジョブの Outputs:Watermarks:InputKey オブジェクトのいずれかで指定したファイルの幅 x 高さが最大許容の幅 x 高さを超えています。
4005 Bad Input File {1} オブジェクトのいずれかに指定したファイルのサイズが最大許容のサイズを超えています: bucket={2}、key={3}、size{4}、max size={5}
4006 Bad Input File Elastic Transcoder で入力ファイルのトランスコードが実行されませんでした。この形式はサポートされていません。
4007 Unhandled Input File Elastic Transcoder によって、一般的にサポートされているファイルのタイプが検出されましたが、ファイルが正しく処理されませんでした。このエラーによってサポートケースが自動的に開かれ、Amazon が問題の原因調査を開始しました。
4008 Bad Input File

根本的な原因はプリセットと入力ファイルとの不一致です。その例を以下に示します。

  • プリセットにはオーディオ設定が含まれているが、入力ファイルにはオーディオが含まれていない。

  • プリセットには動画設定が含まれているが、入力ファイルには動画が含まれていない。

4009 Bad Input File Elastic Transcoder でアルバムアートのすべてを出力ファイルに挿入できませんでした。アートワークストリームの最大数を超えています。
4010 Bad Input File AlbumArt:Artwork:InputKey に指定したグラフィックファイルが Elastic Transcoder で解釈されませんでした。
4011 Bad Input File Elastic Transcoder で埋め込みアートワークストリームが検出されましたが、解釈されませんでした。
4012 Bad Input File AlbumArt:Artwork に指定した画像が最大許容の幅 x 高さ (4,096 x 3,072) を超えています。
4013 Bad Input File 埋め込みアートワークの幅 x 高さが最大許容の幅 x 高さ (4,096 x 3,072) を超えています。
4014 Bad Input クリップの開始時間に指定した値が入力ファイルの終了時間より後になっています。Elastic Transcoder で出力ファイルを作成できませんでした。
4015 Bad Input 生成されたセグメントが一致しなかったため、Elastic Transcoder によりマニフェストファイルが生成されませんでした。
4016 Bad Input Elastic Transcoder で、{2} を使用して {1} から入力ファイルを復号できませんでした。
4017 Bad Input AES キーは {2} ビット暗号化キーを使用して暗号化されています。AES では、128、192、256 ビットの暗号化キーのみをサポートしています。MD5={1}
4018 Bad Input MD5={1} を使用して暗号化されたキーが Elastic Transcoder で復号できませんでした。
4019 Bad Input Elastic Transcoder で、KMS キーの ARN \{0} を使用してデータキーを生成できませんでした。
4020 Bad Input AES-128 暗号化では、キーが 128 ビットである必要があります。MD5={1}、{2} ビット。
4021 Bad Input PlayReady DRM では、キーが 128 ビットである必要があります。MD5={1}、strength={2} ビット。
4022 Bad Input 指定されたメディアファイル {1} 個の結合サイズが最大許容サイズを超えています: bucket={2}、size={3}。
4023 Bad Input 連結のために指定された {1} 個の入力ファイルから、指定されたプリセットで一貫した解像度の出力が作成されません。異なる PaddingPolicySizingPolicyMaxWidthMaxHeight 設定のプリセットを使用してください。
4024 Bad Input 連結のために指定された {1} 個の入力ファイルから、指定されたプリセットで一貫した解像度のサムネイルが作成されません。サムネイルの異なる PaddingPolicySizingPolicyMaxWidthMaxHeight 設定のプリセットを使用してください。
4025 Bad Input 少なくとも 1 つのメディアファイル (入力 #{1}) が他のファイルと一致しません。すべてのメディアファイルに動画が含まれているか、どのメディアファイルにも動画が含まれていないことが必要です。
4026 Bad Input 少なくとも 1 つのメディアファイル (入力 #{1}) が他のファイルと一致しません。すべてのメディアファイルに音声が含まれているか、どのメディアファイルにも音声が含まれていないことが必要です。
4100 Bad Input File Elastic Transcoder によって埋め込みキャプショントラックが検出されましたが、解釈されませんでした。
4101 Bad Input File Amazon S3 bucket={1}、key={2} の指定のキャプションファイルが Elastic Transcoder で解釈されませんでした。
4102 Bad Input File 指定のキャプションファイルが UTF-8 でエンコードされていなかったため Elastic Transcoder で解釈されませんでした: Amazon S3 bucket={1}、key={2}
4103 Bad Input File キャプショントラックの一部がキャプショントラックの最大数 ({1}) を超えたため、Elastic Transcoder で処理されませんでした。
4104 Bad Input File 指定の出力に {1} 個の埋め込みキャプションオプションが含まれていたため、Elastic Transcoder によってマスタープレイリストが生成されませんでした。最大個数は 4 です。
4105 Bad Input File CEA-708 でフレームレート {1} はサポートされていないため、Elastic Transcoder でキャプショントラックが埋め込まれませんでした。フレームレート [29.97, 30] のみがサポートされています。
4106 Bad Input File 形式 {1} では {2} キャプショントラックしかサポートされていないため、Elastic Transcoder によってキャプショントラックが埋め込まれませんでした。
9000 Internal Service Error
9001 Internal Service Error
9999 Internal Service Error

エラーの捕捉

アプリケーションをスムーズに実行するには、エラーを見つけ、エラーに対応するロジックを組み込む必要があります。1 つの一般的なアプローチとしては、try ブロックまたは if-then ステートメントにリクエストを実装する方法が挙げられます。

AWS SDK は独自に再試行とエラーチェックを実行します。いずれかの AWS SDK の使用中にエラーが発生した場合は、エラーコードと説明が表示されます。また Request ID の値も表示されます。Request ID の値は、Elastic Transcoder のサポートによって問題のトラブルシューティングを行うために役立ちます。

次の例では、AWS SDK for Java を使用して 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()); }

エラーの再試行とエクスポネンシャルバックオフ

DNS サーバー、スイッチ、ロードバランサーなど、ネットワークの多数のコンポーネントが、特定のリクエストの存続期間中どこでもエラーを生成する可能性があります。

ネットワーク環境でこれらのエラー応答を処理する通常の方法は、クライアントアプリケーションで再試行を実装することです。この技術は、アプリケーションの信頼性を向上させ、開発者の運用コストを削減します。

Elastic Transcoder をサポートする各 AWS SDK には自動再試行ロジックが実装されています。AWS SDK for Java は自動的にリクエストを再試行します。再試行は、ClientConfiguration クラスを使用して設定できます。たとえば、ウェブページが最小のレイテンシーで再試行なしでリクエストを実行する場合などに、再試行ロジックを停止させることがあります。再試行を無効にするには、ClientConfiguration クラスを使用し、maxErrorRetry0 値を指定します。

AWS SDK を使用していない場合は、サーバーエラー (5xx) を受け取る元のリクエストを再試行する必要があります。ただし、クライアントエラー (4xx、ThrottlingException または ProvisionedThroughputExceededException 以外) は、再試行する前にリクエスト自体を修正して問題を解決する必要があることを示しています。

注記

ポーリングによりリクエストのステータスを調べているとき、Elastic Transcoder によって HTTP ステータスコード 429 (エラーコード Provisioned Throughput Exceeded Exception または Throttling Exception) が返される場合は、ポーリングの代わりに通知を使用してステータスを調べることを検討してください。詳細については、「ジョブのステータスの通知」を参照してください。

単純な再試行に加えて、効果的なフロー制御を行うために、エクスポネンシャルバックオフアルゴリズムを使用することをお勧めします。エクスポネンシャルバックオフの背後にある考え方は、連続したエラー応答の再試行間の待機時間を徐々に長く使用することです。たとえば、最初の再試行前に 1 秒間、2 回目の再試行前に 4 秒間、3 回目の再試行前に 16 秒間というように、待機時間を指定します。ただし、リクエストが 1 分後に成功しなかった場合、問題はハードリミットであり、リクエストの頻度でない可能性があります。たとえば、最大許可のパイプライン数に達した可能性があります。1 分程度で再試行が停止するように最大回数を設定します。

次に、再試行ロジックが含まれたワークフローを示します。このワークフローロジックでは、最初にそのエラーがサーバーエラー (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