AWS transcribe- неверный запрос: ошибка, обнаруженная в "transcriptionJobName", не соответствует ограничению:

привет, я вызываю задание транскрибирования в лямбда-функцию AWS, но я не могу найти ни одной созданной роли, я видел эту ошибку в журнале облачных наблюдений. Может ли кто-нибудь помочь мне с этим, пожалуйста, у меня возникла эта проблема 3 дня, но я не мог нашел какое-то решение.

Это сообщение об ошибке здесь

      'use strict';
var aws = require('aws-sdk');
var s3 = new aws.S3();
var transcribeservice = new aws.TranscribeService();

exports.handler = (event, context, callback) => {
    console.log('Received event:', JSON.stringify(event, null, 2));
    var bucket = event.Records[0].s3.bucket.name;
    var key = event.Records[0].s3.object.key;    
    var newKey = key.split('.')[0];
    var str = newKey.lastIndexOf("/");
    newKey = newKey.substring(str+1);
    
    var inputaudiolocation = "https://s3.amazonaws.com/search-video/inputaudio/";
    var mp3URL = inputaudiolocation+newKey+".mp3";
    var outputbucket = "search-video";
    var params = {
        LanguageCode: "en-US", /* required */
        Media: { /* required */
          MediaFileUri: mp3URL
        },
        MediaFormat: "mp3", /* required */
        TranscriptionJobName: newKey, /* required */
        MediaSampleRateHertz: 44100,
        OutputBucketName: outputbucket
      };
      transcribeservice.startTranscriptionJob(params, function(err, data){
      if (err){
       console.log('Received event:Error = ',err);
      } else {
       console.log('Received event:Success = ',data);
      }
     });
};
'''
Thanks in Advance !!!

1 ответ

Учитывая, что прошло 10 месяцев, я думаю, вы, вероятно, продвинулись с этой проблемой. В любом случае, в образе журнала есть причина, по которой задание транскрипции не удалось: его имя не соответствует требуемому регулярному выражению (регулярному выражению).

Как указано в описании параметра в справочнике по API AWS Transcribe, он должен соответствовать шаблону регулярного выражения.

Мое предложение наивно решить эту проблему состояло бы в том, чтобы удалить все недопустимые символы. До paramsобъявление, но после последнего newKeyзадание можно включить:

НАИВНОЕ ПРЕДЛОЖЕНИЕ :

      newKey = newKey.replace(/[^0-9a-zA-Z._-]/g, '')

Этого должно быть достаточно для вашей проблемы. Объяснение этого кода описано ниже в другом предложении.

Однако, если мы вернемся к документации по параметрам, нам следует обратить внимание на некоторые моменты.

Уникальное имя, выбранное вами для вашей работы по расшифровке.Указанное имя также используется в качестве имени по умолчанию для выходного файла транскрипции. Если вы хотите указать другое имя для вывода транскрипции, используйте OutputKeyпараметр.

Это имя чувствительно к регистру, не может содержать пробелов и должно быть уникальным в пределах учетной записи AWS.Если вы попытаетесь создать новое задание с тем же именем, что и у существующего задания, вы получите ConflictExceptionошибка.

Тип: Строка

Ограничения длины: Минимальная длина 1. Максимальная длина 200.

Шаблон: ^[0-9a-zA-Z._-]+

Требуется: Да

Принимая во внимание ограничение уникальности, ограничение максимальной длины и ограничение шаблона регулярного выражения, здесь предлагается принять во внимание все это.

ЛУЧШЕЕ ПРЕДЛОЖЕНИЕ :

      const nowAsISOString = (new Date()).toISOString();
newKey = (nowAsISOString+newKey).replace(/[^0-9a-zA-Z._-]/g, '').slice(0, 200);

Он учитывает отметку времени, когда имя задания было установлено с помощьюDate.prototype.toISOString(). будет хранить строковое значение, такое как .

Заметь nowAsISOStringбудет содержать недопустимые символы в параметре. Но сам по себе этот факт не будет проблемой, учитывая, что полная строка (отметка времени плюс ранее выбранное имя - nowAsISOString+newKey) будут заменены недопустимые символы в соответствии с шаблоном пустой строкой ( .replace(/[^0-9a-zA-Z._-]/g, '')).

Когда ^является первым символом в группе [], это указывает на отрицание: оно будет соответствовать всему, что не входит в группу.

На странице групп и диапазонов регулярных выражений JavaScript MDN есть более подробное объяснение:

Персонажи : [^xyz] [^a-c]

Значение : отрицательный или дополненный класс символов. То есть соответствует всему, что не заключено в скобки. Вы можете указать диапазон символов, используя дефис, но если дефис появляется как первый или последний символ, заключенный в квадратные скобки, он воспринимается как буквальный дефис, который должен быть включен в класс символов как обычный символ. Например, [^abc] — это то же самое, что [^ac]. Первоначально они соответствуют «o» в слове «бекон» и «h» в слове «отбивная».Примечание. Символ ^ также может указывать на начало ввода.

Функция сопоставляет шаблон и заменяет его заменой. В случае предложения он будет сопоставлять все, что не разрешено, с пустой строкой несколько раз ( gпараметр). Более подробная информация для replaceработа в MDN String.prototype.replace()страница .

Учитывая вышеупомянутое объяснение, он удалит все символы, которые не соответствуют ожидаемому шаблону для файла . Возвращаясь к примеру с временной меткой строки, он заменит from 2011-10-05T14:48:00.000Zк 2011-10-05T144800.000Z.

Последняя порция .slice(0, 200)обрезает строку до 200 символов. Более подробная информация для sliceработа в MDN String.prototype.slice()страница .

Основываясь на лучшем предложении, у вас будет TranscriptionJobNameпараметр, который:

  • уникален из-за метки времени определения имени
  • удалит недопустимые символы (первоначальная проблема OP) и
  • иметь строку в пределах допустимого количества символов.
Другие вопросы по тегам