我已经构建了自己的Docker容器,它提供了将作为端点部署到上的推理代码。但是,这个容器需要访问来自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)'))任何帮助都是非常感谢的!
发布于 2019-07-03 08:22:00
对于遇到此问题的任何人,在创建模型时,“启用网络隔离”属性默认为True。来自AWS文档:
如果启用网络隔离,则容器无法进行任何出站网络调用,甚至无法对其他AWS服务(如Amazon )进行调用。此外,不向容器运行时环境提供AWS凭据。
因此,需要将该属性设置为False,以便连接到任何其他AWS服务。

发布于 2019-07-01 12:47:38
出于安全原因,他们不让它本地访问s3,您需要将其连接到VPC https://docs.aws.amazon.com/sagemaker/latest/dg/host-vpc.html
https://stackoverflow.com/questions/56835306
复制相似问题