AWS MediaConvert не смог определить регион для сегмента s3.Bucket(name='myname')
Моя цель - создать задание MediaConvert из данного шаблона с помощью boto3 с python: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/mediaconvert.html
По-видимому, MediaConvert не может определить область моего выходного сегмента s3. У меня сложилось впечатление, что ведра были глобальными, но даже после некоторой обработки я не смог решить проблему.
Вот сообщение об ошибке от панели управления MediaConvert:
Could not identify region for bucket s3.Bucket(name='mybucket'): Failed to lookup region of buckets3.Bucket(name='mybucket')
Код ошибки 1404.
Когда я щелкаю группу вывода на панели инструментов для задания, которое не удалось, я перенаправляюсь в " https://console.aws.amazon.com/s3/buckets/s3.Bucket(name='mybucket') /? Регион =us-east-1", что явно не в состоянии разрешить ведро. Правильный путь был бы " https://console.aws.amazon.com/s3/buckets/mybucket/?region=us-east-1".
Вот код, который запускает работу:
media_client = boto3.client('mediaconvert', region_name='us-east-1')
endpoints = media_client.describe_endpoints()
customer_media_client = boto3.client('mediaconvert', region_name='us-east-1', endpoint_url=endpoints['Endpoints'][0]['Url'])
customer_media_client.create_job(
JobTemplate='job-template',
Role='arn:aws:iam::1234567890:role/MediaConvert',
Settings=...
В настройках я использую следующие OutputGroupSettings:
"OutputGroupSettings": {
"Type": "FILE_GROUP_SETTINGS",
"FileGroupSettings": {
"Destination": "s3://%s/" % target_bucket
}
}
Я проверил, что все задания MediaConvert и S3 находятся в одном регионе (us-east-1).
Есть идеи, в чем ошибка? Если вам нужно больше кода, пожалуйста, дайте мне знать.
Я также задавал этот вопрос на форумах aws: https://forums.aws.amazon.com/thread.jspa?threadID=304143
2 ответа
Похоже, это известная проблема, связанная с оператором форматирования строки, используемым в словаре Python.
В коммите Проблема № 14123: Явно упомяните, что форматирование строки% в старом стиле имеет оговорки, но не исчезнет в ближайшее время .
Использование бинарного оператора означает, что для правильного форматирования кортежей и словарей может потребоваться осторожность.
Проверьте этот ответ для получения более подробной информации.
Это объясняет, почему вывод задания за пределы диктовки решает проблему. Рассмотрите возможность использования
.format()
метод замены
%
.
Мое сообщение об ошибке
Я получил такое же сообщение об ошибке от MediaConvert, но в моей проблеме не было
"/"
после имени сегмента в поле «Назначение».
Первоначально мой код был:
FileGroupSettings['Destination'] = 's3://' + bucketName + S3key
Добавив косую черту, он может найти нужное ведро
FileGroupSettings['Destination'] = 's3://' + bucketName + '/' + S3key
Я решил проблему, распаковав "s3://%s/" % target_bucket
в отдельную декларацию.
s3_target = "s3://%s/" % target_bucket
...
"Destination": s3_target