Skip to main content
 首页 » 编程设计

python之Tensorflow之S3 对象不存在

2024年09月03日28unruledboy

如何为 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 中。 在那里我第一次看到:

  1. 当我从 boto3 指定凭据时,错误是:您提供的 AWS 访问 key ID 在我们的记录中不存在。
  2. 在没有 AWS_REGION env 变量集的情况下访问时,我有 您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有 future 的请求发送到此端点。 这在您未指定存储桶时显然很常见(请参阅 301 Moved Permanently after S3 uploading )