Обработка ошибок AWS SDK Media Convert в laravel

У меня есть список идентификаторов заданий, чтобы проверить их статус. Итак, я просто просматриваю все идентификаторы заданий, чтобы получить их статус в Media Convert.

function get_aws_job_id_status($job_id)
{
    $result = [];
    $client = \App::make('aws')->createClient('MediaConvert', [

        // 'profile' => 'default',
        // 'version' => '2017-08-29',
        'region'  => 'region',
        'endpoint' => "endpoint"
    ]);
    try {
        $result = $client->getJob([
            'Id' => $job_id,
        ]);
        return $result;
    } catch (AwsException $e) {
        return $result;
    }
}

Я использую вышеуказанную функцию внутри цикла, чтобы получить статус. Ссылка на Документы AWS и Stackoverflow, но тем не менее, когда я не нахожу запись для данного идентификатора задания, он возвращает ошибку NotFoundException, которая не входит в блок catch и не прерывает цикл. Есть ли способ обработать это исключение, чтобы я мог продолжить цикл?


person VPC    schedule 28.05.2021    source источник


Ответы (1)


Я считаю, что вам нужно вызвать Aws\MediaConvert\Exception\MediaConvertException и отловить конкретные ошибки MediaConvert. Я не вижу никаких ваших утверждений об использовании, но я предполагаю, что код будет выглядеть примерно так:

Примечание. Я отлавливаю все ошибки клиента MediaConvert, но я считаю, что вы можете специально вызвать NotFoundException, выполнив Aws\MediaConvert\Exception\MediaConvertException\NotFoundException

use Aws\MediaConvert\MediaConvertClient;
use Aws\Exception\AwsException;
use Aws\MediaConvert\Exception\MediaConvertException as MediaConvertError;


function get_aws_job_id_status($job_id)
{
    $result = [];
    $client = \App::make('aws')->createClient('MediaConvert', [

        // 'profile' => 'default',
        // 'version' => '2017-08-29',
        'region'  => 'region',
        'endpoint' => "endpoint"
    ]);
    try {
        $result = $client->getJob([
            'Id' => $job_id,
        ]);
        return $result;
    } catch (MediaConvertError $e) {
    
           /*Oh no, the job id provided ca not be found.
             Let us log the job id and the message and return it back up to the main application
             Note this assumes the main application is iterating through a list of JobIDs and 
             can handle this and log that job id was not found and will not have the normal Job
             JSON structure. 
           */
        $error = array("Id"=>$job_id, "Message"=>"Job Id Not found");
        $result = json_encode($error);
        return $result;
    }
}

Также имейте в виду, что если вы опрашиваете статус работы, вы можете быть ограничены, если ваш список станет слишком большим. Вам нужно будет поймать TooManyRequestsException [1] и попробовать опрос с порогом отсрочки [2].

Наиболее масштабируемое решение — использовать CloudWatch Events и отслеживать задания на основе статуса STATUS_UPDATE, COMPLETE и ERROR. [3]

[1] https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.MediaConvert.Exception.MediaConvertException.html
[2] https://docs.aws.amazon.com/general/latest/gr/api-retries.html
[3] https://docs.aws.amazon.com/mediaconvert/latest/ug/monitoring-overview.html

person jjohn    schedule 03.06.2021