パラメータエラー以外でcreate_jobに失敗しないと思っていましたが、処理できないファイル(サポートされていないコーデックやコンテナ)をアップロードすると例外が発生するので、フロントに返せるように処理してみました。
Lambdaの例外エラーをメールとSlackに通知する でエラーに気付きやすくなりました。
例外通知は大事ですね。

通知メッセージ


〜省略〜

BadRequestException
An error occurred (BadRequestException) when calling the CreateJob operation: /inputs/0/fileInput: For your input file location, provide a valid URL to a supported input file. Valid URLs are S3, http, or https. For valid input file types, see https://docs.aws.amazon.com/console/mediaconvert/reference-codecs-containers-input.

createMediaConvertJob

例外をキャッチして、DynamoDBにエラーメッセージを保存。
フロントでジョブIDを取得する際に取得できるようにしました。

最新のコードこちら → https://dev.azure.com/nightonly/_git/lambda-origin?path=/createMediaConvertJob/lambda_function.py

    # MediaConvertジョブ作成
    mediaconvertClient = boto3.client('mediaconvert', endpoint_url = MEDIACONVERT_ENDPOINT_URL)
+    try:
        result = mediaconvertClient.create_job(
            Role = MEDIACONVERT_ROLE,
            JobTemplate = MEDIACONVERT_JOB_TEMPLATE,
            Settings = settings
        )
        print(result)
+    except Exception as e: # Tips: コーデックやコンテナがサポート対象外だとBadRequestExceptionになる
+        update_table_to_job_id(str(e), input_file, creation_time, expiration_time)
+        return
+ # DynamoDBにエラーメッセージ保存 Tips: フロントにエラーを返却するのに使用
+ def update_table_to_job_id(error_message, input_file, creation_time, expiration_time):
+     print(error_message)
+     print(table_to_job_id.update_item(
+         Key = {
+             'InputFile': input_file
+         },
+         UpdateExpression = 'set ErrorMessage = :error_message,'
+                             + ' CreationTime = :creation_time, ExpirationTime = :expiration_time',
+         ExpressionAttributeValues = {
+             ':error_message': error_message,
+             ':creation_time': creation_time,
+             ':expiration_time': expiration_time
+         }
+     ))

mediaConvertInputFileToJobIdApi

追加したエラーメッセージ(序でに作成日時)を返却するようにしました。

最新のコードこちら → https://dev.azure.com/nightonly/_git/lambda-origin?path=/mediaConvertInputFileToJobIdApi/lambda_function.py

+ import datetime
-    return success_response(response['Item']['JobId'])
+    return success_response(response['Item'])
- def success_response(job_id):
-     return { 'statusCode': 200, 'headers': headers, 'body': json.dumps({ 'success': True, 'job_id': job_id }) }
+ def success_response(item):
+     job_id = item['JobId'] if 'JobId' in item else None
+     error_message = item['ErrorMessage'] if 'ErrorMessage' in item else None
+     creation_time = str(datetime.datetime.fromtimestamp(item['CreationTime'], datetime.timezone.utc))
+     return { 'statusCode': 200, 'headers': headers, 'body': json.dumps({ 'success': True, 'job_id': job_id, 'error_message': error_message, 'creation_time': creation_time }) }

mediaConvertInputFileToJobIdEdgeApi

ほぼ同じなので、下記を参照してください。

最新のコードこちら → https://dev.azure.com/nightonly/_git/lambda-origin?path=/mediaConvertInputFileToJobIdEdgeApi/lambda_function.py

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です