【问题标题】:Download file using boto3 within Docker container deployed on Sagemaker Endpoint在 Sagemaker Endpoint 上部署的 Docker 容器中使用 boto3 下载文件
【发布时间】:2022-01-04 20:28:54
【问题描述】:

我已经构建了自己的 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)'))

感谢任何帮助!

【问题讨论】:

    标签: python-3.x amazon-web-services boto3 amazon-sagemaker


    【解决方案1】:

    出于安全原因,他们不允许它本地访问 s3,您需要将其连接到 VPC https://docs.aws.amazon.com/sagemaker/latest/dg/host-vpc.html

    【讨论】:

    • 感谢您的回答,我找到了一种更简单的方法,将网络隔离设置为 False,我不知道它默认为 True!
    【解决方案2】:

    对于遇到此问题的任何人,在创建模型时,“启用网络隔离”属性默认为 True。 来自 AWS 文档:

    如果您启用网络隔离,容器将无法进行任何出站网络调用,甚至无法调用其他 AWS 服务,例如 Amazon S3。此外,没有任何 AWS 凭证可用于容器运行时环境。

    因此需要将此属性设置为 False 才能连接到任何其他 AWS 服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2017-02-03
      • 2021-06-26
      • 2020-02-23
      • 1970-01-01
      相关资源
      最近更新 更多