Elastic Transcoder에서의 오류 처리 - Amazon Elastic Transcoder

비용을 절감하고 더 많은 기능을 확보하십시오. AWS Elemental MediaConvert

MediaConvert 는 포괄적인 고급 트랜스코딩 기능을 제공하는 최신 파일 기반 비디오 트랜스코딩 서비스로, 온디맨드 요금은 분당 0.0075달러부터 시작합니다. 자세한 내용을 읽어보세요.

이미 Amazon Elastic Transcoder를 사용하고 계신가요? MediaConvert마이그레이션하는 방법은 간단합니다. 자세한 내용은 마이그레이션 프로세스에 대한 중요한 정보와 추가 리소스 링크가 포함된 이 개요를 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Elastic Transcoder에서의 오류 처리

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 오류 코드(클라이언트 및 서버 오류)를 참조하세요.

Elastic Transcoder가 작업을 처리하는 동안 오류가 발생할 수도 있습니다. 자세한 내용은 작업 처리 중 오류 발생 섹션을 참조하세요.

API 오류 코드(클라이언트 및 서버 오류)

HTTP 상태 코드는 작업의 성공 여부를 나타냅니다.

응답 코드 200은 작업 성공을 나타냅니다. 다른 오류 코드는 클라이언트 오류(4xx) 또는 서버 오류(5xx)를 나타냅니다.

다음 표는 Elastic Transcoder에서 반환되는 오류를 나열한 것입니다. 일부는 동일한 요청을 재시도하는 것만으로도 해결됩니다. 연이어 재시도하여 해결 가능성이 있는 오류는 따로 표시되어 있습니다. 재시도 열의 값은 다음을 의미합니다.

  • Yes: 동일한 요청을 다시 제출합니다.

  • No 새 요청을 제출하기 전에 클라이언트 측에서 문제를 해결합니다.

요청 재시도에 대한 자세한 내용은 오류 재시도 횟수 및 지수 백오프 섹션을 참조하세요.

HTTP 상태 코드 오류 코드 메시지 원인 다시 해 보십시오
400 Conditional Check Failed Exception 조건부 요청이 실패하였습니다. 예: 예상 값이 시스템에 저장된 값과 일치하지 않습니다. 아니요
400 Incomplete Signature Exception 요청 서명이 AWS 표준을 준수하지 않습니다. 요청 서명에 일부 필요한 구성 요소가 빠져있습니다. HTTP 헤더 콘텐츠 섹션을 참조하세요. 아니요
403 Missing Authentication Token Exception 요청에는 유효한(등록된) AWS 액세스 키 ID가 포함되어야 합니다. 요청에 필수 x-amz-security-token이 포함되어 있지 않습니다. Elastic Transcoder에 대한 HTTP 요청 만들기 섹션을 참조하세요. 아니요
400 Validation Exception 다양한. 요청에서 하나 이상의 값이 누락되거나 유효하지 않습니다. 예를 들어 값이 비어 있거나 최대 유효 값보다 큽니다. 아니요
403 AccessDenied Exception
  • 시스템 프리셋 삭제가 허용되지 않음: account=<accountId>, presetId=<presetId>.

  • 일반 인증 실패. 클라이언트가 요청에 정확히 서명하지 않았습니다. 요청에 서명하기 섹션을 참조하세요.

시스템 프리셋을 삭제하려고 시도했거나, Elastic Transcoder API에 대한 호출의 서명이 유효하지 않거나, IAM 사용자가 작업을 수행할 수 있는 권한이 없습니다.

아니요
404 ResourceNot Found Exception
  • 지정한 <resource>를 찾을 수 없음: <resourceId>.

  • 지정한 작업을 찾을 수 없음: account=<accountId>, jobId=<jobId>.

  • 지정한 파이프라인을 찾을 수 없음: account=<accountId>, pipelineId=<pipelineId>

  • 지정한 프리셋을 찾을 수 없음: account=<accountId>, presetId=<presetId>

예: 작업을 추가하려는 파이프라인이 존재하지 않거나, 현재 생성 중입니다. 아니요
409 Resource InUse Exception
  • <resource>가 이미 사용 중임: accountId=<accountId>, resourceId=<resourceId>.

  • 파이프라인에 활성 작업이 있음: account=<accountId>, pipeline=<pipelineId>.

예: 현재 사용 중인 파이프라인을 삭제하려고 시도했습니다. 아니요
429 Limit Exceeded Exception
  • 계정의 파이프라인 수가 이미 최대 허용 개수임: 계정=<accountId>, 최대 파이프라인 수=<maximum>

  • 계정의 프리셋 수가 이미 최대 허용 개수임: 계정=<accountId>, 최대 프리셋 수=<maximum>

  • 계정의 작업 수가 이미 백로그의 파이프라인당 최대 개수임: 계정=<accountId>, 파이프라인에 대한 백로그의 최대 작업 수=<maximum>

현재 AWS 계정이 Elastic Transcoder 객체 한도를 초과했습니다. 자세한 내용은 Elastic Transcoder 파이프라인, 작업, 프리셋 개수 제한 섹션을 참조하세요.
429 Provisioned Throughput Exceeded Exception 허용되는 최대 프로비저닝 처리량을 초과하였습니다.

예: 요청량이 너무 높습니다. Elastic Transcoder용 AWS SDK가 예외가 발생한 요청을 자동으로 재시도합니다. 재시도 대기열이 너무 많아 완료하지 못하는 경우를 제외하고 결국 요청이 성공합니다. 요청 횟수를 줄입니다. 자세한 내용은 오류 재시도 횟수 및 지수 백오프 섹션을 참조하세요.

요청 상태를 확인하기 위해 폴링할 경우 알림을 사용하여 상태를 확인해 보세요. 자세한 내용은 작업 상태 알림 섹션을 참조하세요.

429 Throttling Exception 요청량이 허용 처리량을 초과하였습니다.

요청을 너무 빠른 속도로 제출하고 있습니다. 예: 새 작업을 생성하는 요청.

요청 상태를 확인하기 위해 폴링할 경우 알림을 사용하여 상태를 확인해 보세요. 자세한 내용은 작업 상태 알림 섹션을 참조하세요.

500 Internal Failure 요청을 실행하는 중 서버 내부에서 오류가 발생하였습니다. 요청을 처리하는 도중 서버에서 오류가 발생하였습니다.
500 내부 서버 오류 요청을 실행하는 중 서버 내부에서 오류가 발생하였습니다. 요청을 처리하는 도중 서버에서 오류가 발생하였습니다.
500 Internal Service Exception 서비스가 요청을 충족하는 동안 예기치 못한 예외가 발생했습니다.
500 Service Unavailable Exception 현재 서비스를 이용할 수 없거나 사용 중입니다. 요청을 처리하는 도중 예상하지 못한 오류가 서버에서 발생하였습니다.

샘플 오류 응답

다음은 inputBucket 값이 null이었음(유효한 값이 아님)을 나타내는 HTTP 응답입니다.

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에서 작업을 처리하는 도중 오류가 발생할 경우 두 가지 방법으로 오류가 보고됩니다.

  • 작업 상태 및 출력 상태: 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 Validation Error Elastic Transcoder가 작업 처리 중 요청의 값 중 한 개 이상이 유효하지 않음을 확인했습니다.
1001 Dependency Error 재생 목록 종속성 중 하나 이상에 오류가 발생하여 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 버킷이 존재하지 않습니다. 버킷={1}입니다.
3006 Does Not Have Write Permission 키가 버킷과 동일한 리전에 있지 않기 때문에 Elastic Transcoder가 키={1}을(를) 버킷={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} 객체 중 하나에 지정한 파일 크기가 최대 허용 크기: 버킷={2}, 키={3}, 크기{4}, 최대 크기={5}를 초과합니다.
4006 Bad Input File 입력 파일 형식이 지원되지 않기 때문에 Elastic Transcoder가 입력 파일을 트랜스코딩할 수 없습니다.
4007 처리되지 않은 입력 파일 Elastic Transcoder에서 일반적으로 지원하는 파일 형식이지만 제대로 처리하지 못한 파일이 있습니다. 이 오류는 자동으로 지원 요청을 개설하므로 문제 원인의 조사를 시작했습니다.
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 높이: 4096 x 3072를 초과합니다.
4013 Bad Input File 임베디드 아트워크의 너비 x 높이가 최대 허용 너비 x 높이: 4096 x 3072를 초과합니다.
4014 Bad Input 클립의 시작 시간으로 지정한 값이 입력 파일의 끝보다 나중입니다. Elastic Transcoder가 출력 파일을 생성할 수 없습니다. Elastic Transcoder가 출력 파일을 생성할 수 없습니다.
4015 Bad Input 생성된 세그먼트가 일치하지 않기 때문에 Elastic Transcoder가 매니페스트 파일을 생성할 수 없습니다.
4016 Bad Input Elastic Transcoder가 {1}의 입력 파일을 {2}을(를) 사용하여 해독할 수 없습니다.
4017 Bad Input AES 키가 {2}비트 암호화 키를 사용하여 암호화되었습니다. AES는 128비트, 192비트, 256비트 암호화 키만 지원합니다. MD5={1}.
4018 Bad Input Elastic Transcoder가 MD5={1}을(를) 사용하여 암호화된 키를 해독하지 못했습니다.
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}, 강도={2} 비트.
4022 Bad Input {1} 지정 미디어 파일의 통합 크기가 최대 허용 크기: 버킷={2}, 크기={3}를 초과합니다.
4023 Bad Input 연결에 지정된 {1} 입력 파일이 지정된 프리셋과 일치하는 해상도로 출력을 생성하지 않습니다. 다른 PaddingPolicy, SizingPolicy, MaxWidth, MaxHeight 설정의 프리셋을 사용하세요.
4024 Bad Input 연결에 지정된 {1} 입력 파일이 지정된 프리셋과 일치하는 해상도로 썸네일을 생성하지 않습니다. 다른 PaddingPolicy, SizingPolicy, MaxWidth, MaxHeight 설정의 썸네일을 사용하세요.
4025 Bad Input 한 개 이상의 미디어 파일(입력 #{1})이 다른 파일과 일치하지 않습니다. 모든 미디어 파일이 비디오이거나 비디오가 아니어야 합니다.
4026 Bad Input 한 개 이상의 미디어 파일(입력 #{1})이 다른 파일과 일치하지 않습니다. 모든 미디어 파일이 오디오이거나 오디오가 아니어야 합니다.
4100 Bad Input File Elastic Transcoder가 임베디드 캡션 트랙을 감지했지만 해석할 수 없습니다.
4101 Bad Input File Elastic Transcoder가 Amazon S3 버킷={1}, 키={2}에 지정된 캡션 파일을 해석할 수 없습니다.
4102 Bad Input File 지정된 캡션 파일이 UTF-8 인코딩 형식이 아니기 때문에 Elastic Transcoder가 해석할 수 없음: Amazon S3 버킷={1}, 키={2}.
4103 Bad Input File 최대 허용 캡션 트랙 수인 {1}을(를) 초과했기 때문에 Elastic Transcoder가 캡션 트랙을 일부 처리하지 못했습니다.
4104 Bad Input File 임베디드 캡션의 최대 개수는 4개인데 해당 출력에 {1}개의 임베디드 캡션이 있기 때문에 Elastic Transcoder가 마스터 재생 목록을 생성할 수 없습니다.
4105 Bad Input File CEA-708에는 {1}의 프레임 속도가 지원되지 않기 때문에 Elastic Transcoder가 캡션 트랙을 임베딩할 수 없습니다. [29.97, 30]의 프레임 속도만 지원됩니다.
4106 Bad Input File {1} 형식은 {2}개의 캡션 트랙만 지원하기 때문에 Elastic Transcoder가 캡션 트랙을 임베딩할 수 없습니다.
9000 내부 서버 오류
9001 내부 서버 오류
9999 내부 서버 오류

오류 발견

애플리케이션의 원활한 실행을 위해서는 오류를 발견하여 대응할 수 있는 로직을 내장해야 합니다. 일반적으로 try 블록 또는 if-then 문 내에서 요청을 실행하는 방법이 많이 사용됩니다.

AWS SDK는 자체적으로 재시도 및 오류 검사를 실행합니다. AWS SDK 사용 중에 오류가 발생하면 해당 오류 코드와 설명을 확인해야 합니다. 또한 Request ID 값도 확인해야 합니다. Request ID 값은 Elastic Transcoder 지원 문제를 해결하는 데 도움이 됩니다.

다음은 Java용 AWS SDK를 사용하여 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는 모두 자동 재시도 로직을 구현합니다. Java용 AWS SDK 역시 자동으로 요청을 재시도하며, 이러한 재시도 설정은 ClientConfiguration 클래스를 사용해 구성할 수 있습니다. 예를 들어 최소의 지연 시간으로 재시도 없이 요청하는 웹 페이지의 경우에는 재시도 로직을 비활성화하면 됩니다. 이때는 ClientConfiguration 클래스를 사용하여 maxErrorRetry 값을 0으로 입력하면 재시도가 비활성화됩니다.

AWS SDK를 사용하지 않을 때는 서버 오류(5xx)가 수신된 최초 요청을 재시도해야 합니다. 하지만 클라이언트 오류(4xx, ThrottlingException 또는 ProvisionedThroughputExceededException 제외)는 요청 자체를 수정하여 문제를 해결해야만 재시도가 가능합니다.

참고

요청 상태를 확인하기 위해 폴링하는 경우 Elastic Transcoder가 HTTP 상태 코드 429와 오류 코드 Provisioned Throughput Exceeded Exception 또는 Throttling Exception을 반환하면 폴링 대신 알림을 사용하여 상태를 확인해 보세요. 자세한 내용은 작업 상태 알림 섹션을 참조하세요.

간단한 재시도 방법 외에도 흐름 제어가 탁월한 지수 백오프 알고리즘을 권장합니다. 지수 백오프의 기본 아이디어는 오류 응답이 연이어 나올 때마다 재시도 간 대기 시간을 점진적으로 늘린다는 것입니다. 예를 들어 1차 재시도 시 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