Я создал свой собственный контейнер Docker, который предоставляет код логического вывода для развертывания в качестве конечной точки в Amazon Sagemaker. Однако этот контейнер должен иметь доступ к некоторым файлам из s3. Используемая роль IAM имеет доступ ко всем сегментам s3, к которым я пытаюсь обратиться.
Код для загрузки файлов с помощью клиента boto3:
import boto3
model_bucket = 'my-bucket'
def download_file_from_s3(s3_path, local_path):
client = boto3.client('s3')
client.download_file(model_bucket, s3_path, local_path)
Политики роли IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-bucket/*"
]
}
]
}
Запуск Docker-контейнера локально позволяет мне скачивать файлы с s3, как и ожидалось.
Развертывание в качестве конечной точки в Sagemaker, однако время ожидания запроса:
botocore.vendored.requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='my-bucket.s3.eu-central-1.amazonaws.com', port=443): Max retries exceeded with url: /path/to/my-file (Caused by ConnectTimeoutError(<botocore.awsrequest.AWSHTTPSConnection object at 0x7f66244e69b0>, 'Connection to my-bucket.s3.eu-central-1.amazonaws.com timed out. (connect timeout=60)'))
Любая помощь приветствуется!