首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在部署在上的Docker容器中使用boto3下载文件

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

Stack Overflow用户
提问于 2019-07-01 11:59:25
回答 2查看 1.3K关注 0票数 4

我已经构建了自己的Docker容器,它提供了将作为端点部署到上的推理代码。但是,这个容器需要访问来自s3的一些文件。使用的IAM角色可以访问我试图访问的所有s3桶。

使用boto3客户端下载文件的代码:

代码语言:javascript
复制
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作用的政策:

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket/*"
            ]
        }
    ]
}

在本地启动docker容器使我可以像预期的那样从s3下载文件。

但是,作为一个端点部署到Sagemaker上,请求超时:

代码语言:javascript
复制
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)'))

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-03 08:22:00

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

如果启用网络隔离,则容器无法进行任何出站网络调用,甚至无法对其他AWS服务(如Amazon )进行调用。此外,不向容器运行时环境提供AWS凭据。

因此,需要将该属性设置为False,以便连接到任何其他AWS服务。

票数 0
EN

Stack Overflow用户

发布于 2019-07-01 12:47:38

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56835306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档