Jan*_*ram 5 amazon-web-services python-3.x boto3 amazon-sagemaker
我构建了自己的 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. (connect timeout=60)'))
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
对于遇到此问题的任何人,在创建模型时,“启用网络隔离”属性默认为 True。来自 AWS 文档:
如果您启用网络隔离,容器将无法进行任何出站网络调用,甚至无法调用其他 AWS 服务(例如 Amazon S3)。此外,没有 AWS 凭证可供容器运行时环境使用。
因此,需要将此属性设置为 False 才能连接到任何其他 AWS 服务。

| 归档时间: |
|
| 查看次数: |
1581 次 |
| 最近记录: |