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) и
- иметь строку в пределах допустимого количества символов.