AWS MediaConvert 无法识别存储桶 s3.Bucket(name='myname') 的区域

AWS MediaConvert could not identify region for bucket s3.Bucket(name='myname')

我的目标是使用 boto3 和 python 从给定模板创建 MediaConvert 作业:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/mediaconvert.html#MediaConvert.Client.create_job

显然 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')/?region=us-east-1", which obviously fails to resolve a bucket. The correct path would have been "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

我通过将 "s3://%s/" % target_bucket 提取到单独的声明中解决了这个问题。

s3_target = "s3://%s/" % target_bucket

...

"Destination": s3_target

这似乎是一个与 Python 字典中使用的 % 字符串格式运算符相关的已知问题。

在提交问题 #14123 中:Explicitly mention that old style % string formatting has caveats but is not going away any time soon

The use of a binary operator means that care may be needed in order to format tuples and dictionaries correctly.

查看此 answer 了解更多详情。

这解释了为什么通过在字典之外进行赋值可以解决问题。考虑使用 .format() 方法替换 %.

我的错误信息

我从 MediaConvert 收到了相同的错误消息,但我的问题是“目标”中的存储桶名称后缺少 "/"

最初我的代码是:

FileGroupSettings['Destination'] = 's3://' + bucketName + S3key

通过添加斜杠,它可以定位到正确的桶

FileGroupSettings['Destination'] = 's3://' + bucketName + '/' + S3key