Я создал образ докера, который был сгенерирован из amazonlinux. Это я вручную установил python3, pip и awscli. Я также настроил AWSCLI для использования моего ключа и секретного ключа. Когда я создаю контейнер из изображения, я могу без проблем взаимодействовать с S3.
Затем я генерирую новое изображение из своего собственного изображения выше, используя Dockerfile. В нем я устанавливаю модули, необходимые для этой задачи (boto3, numpy, pandas, scipy и spacy), а также пользовательский код на python. Это изображение является контейнером, который я использую для AWS Batch.
Мой пользовательский код Python пытается загрузить файл из S3, используя:
jsonText = None
s3 = boto3.client('s3', region_name='us-east-1')
with io.BytesIO() as file_stream:
s3.download_fileobj(args.input_transcript_s3_bucket, args.input_transcript_s3_key, file_stream)
wrapper = io.TextIOWrapper(file_stream, encoding='utf-8')
wrapper.seek(0)
jsonText = wrapper.read()
wrapper.flush()
file_stream.flush()
Когда код Python запускается через AWS Batch, яполучить следующую ошибку:
botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
В другом сообщении по stackoverflow предлагается добавить регион к вызову создания клиента S3. Как и в случае другого автора, это не помогло мне.
Я думаю, что это вопрос политики. Я проверил политику конечных точек VPC и нашел ее достаточной:
{
"Statement": [
{
"Action": "*",
"Effect": "Allow",
"Resource": "*",
"Principal": "*"
}
]
}
Я создал специальную роль службы пакетной обработки. К нему я добавил AWSBatchServiceRole, а также политики AmazonS3FullAccess. Я назначил эту новую служебную роль совершенно новой вычислительной среде без удачи.
Я не уверен, что делать дальше или как получить больше информации. Есть мысли?
Спасибо.