如何为 Tensorflow 设置直接私有(private)存储桶访问?
运行后
从 tensorflow.python.lib.io 导入 file_io 并运行 print file_io.stat('s3://my/private/bucket/file.json') 我最终遇到错误 -
NotFoundError:对象 s3://my/private/bucket/file.json 不存在
但是,公共(public)对象上的同一行没有错误:
print file_io.stat('s3://ryft-public-sample-data/wikipedia-20150518.bin')
这里似乎有一篇关于支持的文章:https://github.com/tensorflow/examples/blob/master/community/en/docs/deploy/s3.md
但是,在导出显示的变量后,我最终遇到了同样的错误。
我已使用所有凭据设置 awscli,boto3 可以查看和下载相关文件。我想知道如何让 Tensorflow 在存储桶私有(private)时直接访问 S3。
请您参考如下方法:
尝试从 Sagemaker 笔记本访问私有(private) S3 存储桶中的文件时,我遇到了同样的问题。我犯的错误是尝试使用我从 boto3 获得的凭据,这些凭据在外部似乎无效。
解决方案不是指定凭据(在这种情况下它使用附加到机器的角色),而是仅指定区域名称(由于某种原因它没有从 ~/.aws/读取它配置文件)如下:
import boto3
import os
session = boto3.Session()
os.environ['AWS_REGION']=session.region_name
注意:当调试这个错误时,查看 CloudWatch 日志很有用,因为 S3 客户端的日志只打印在那里,而不是在 Jupyter notebook 中。 在那里我第一次看到:
- 当我从 boto3 指定凭据时,错误是:
您提供的 AWS 访问 key ID 在我们的记录中不存在。 - 在没有
AWS_REGIONenv 变量集的情况下访问时,我有您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有 future 的请求发送到此端点。这在您未指定存储桶时显然很常见(请参阅 301 Moved Permanently after S3 uploading )
