完整错误为 **botocore.errorfactory.BadRequestException:调用 StartMedicalScribeJob 操作时发生错误 (BadRequestException):无法访问指定的 S3 存储桶。确保您拥有存储桶的写入权限,然后重试您的请求。 **
我的代码是
from __future__ import print_function
import time
import boto3
> transcribe = boto3.client( 'transcribe','us-east-1',aws_access_key_id="myAccessKey",aws_secret_access_key='mySecretAccessKey')
job_name = "my-first-medical-scribe-job"
job_uri="s3://myBucket/myFile"
//File name has spaces in it
response=transcribe.start_medical_scribe_job(
MedicalScribeJobName =job_name,
Media={
'MediaFileUri': job_uri
},
OutputBucketName='same as above bucket',
DataAccessRoleArn='arn:aws:iam::ID:role/myRole',
Settings={
'ShowSpeakerLabels': True,
"MaxSpeakerLabels":2
},
)
我的角色具有管理员访问权限。我可以使用;
将文件上传到此存储桶上import boto3
s3 = boto3.resource('s3', 'us-east-1',aws_access_key_id="myAccessKey",aws_secret_access_key='mySecretAccessKey')
s3.meta.client.upload_file('LocalFile', 'myBucket','myFile')
文档表明 start_medical_scribe_job 在美国东部(弗吉尼亚北部)地区有效。我也在同一区域创建了存储桶。
您遇到的错误表明对指定 S3 存储桶的权限或访问存在问题。您可以采取以下几个步骤来排查和解决问题:
检查S3存储桶权限: 确保您使用的 IAM 角色 (arn:aws:iam::ID:role/myRole) 具有访问 S3 存储桶所需的权限。该角色应该对指定的存储桶具有读写权限。
验证正确的区域: 确认 S3 存储桶和转录客户端均位于正确的 AWS 区域(本例中为 us-east-1)。确保区域名称没有拼写错误或差异。
使用正确的 AWS 凭证: 仔细检查您在 Transcribe 客户端中使用的 AWS 凭证(aws_access_key_id 和 aws_secret_access_key)。确保这些凭据具有转录和 S3 所需的权限。
存储桶命名和权限: 确认存储桶名称正确并遵循 S3 存储桶命名约定。此外,请确保存储桶策略允许 IAM 角色执行必要的操作。
存储桶路径和文件名: 确保您指定的文件路径和名称 (s3://myBucket/myFile) 正确。如果文件名包含空格,您可能需要对它们进行 URL 编码(每个空格为 %20)。
使用 AWS CLI 进行调试: 使用 AWS CLI 检查您是否可以手动启动医疗抄写员作业。这有助于隔离您的代码和 AWS Transcribe 服务之间的问题。
aws transcribe start-medical-scribe-job --region us-east-1 --cli-input-json file://input.json
将您的转录作业配置保存在 JSON 文件 (input.json) 中,并将其与 AWS CLI 命令结合使用。
检查其他错误详细信息: 如果问题仍然存在,请检查 start_medical_scribe_job API 调用的响应中是否有任何其他错误详细信息。这可能会提供有关特定问题的更多信息。
日志记录和 CloudWatch: 为 AWS Transcribe 启用 AWS CloudWatch 日志记录。这可以帮助您收集有关作业执行期间可能出现问题的更多信息。
通过仔细检查这些方面,您应该能够识别并解决 AWS Transcribe 作业中的 S3 存储桶访问问题。