小编Jan*_*ram的帖子

在 Sagemaker Endpoint 上部署的 Docker 容器中使用 boto3 下载文件

我构建了自己的 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)
Run Code Online (Sandbox Code Playgroud)

IAM 角色的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在本地启动 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. …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services python-3.x boto3 amazon-sagemaker

5
推荐指数
1
解决办法
1581
查看次数