【问题标题】:Tensorflow - S3 object does not existTensorflow - S3对象不存在
【发布时间】:2019-10-17 17:26:06
【问题描述】:

如何为 Tensorflow 设置直接私有存储桶访问权限?

运行后
from tensorflow.python.lib.io import file_io 并运行 print file_io.stat('s3://my/private/bucket/file.json') 我最终得到一个错误 -
NotFoundError: Object s3://my/private/bucket/file.json does not exist

但是,公共对象上的同一行可以正常工作:
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 直接访问 S3。

【问题讨论】:

  • TensorFlow 是否使用与 boto 相同的 AWS 凭证来查看和下载相关文件?该文件是由与 Tensorflow 使用的配置文件不同的配置文件创建的吗?
  • Tensorflow 应该使用链接的支持文章中所述的 ~/.aws/credentials 文件,这是对存储桶具有完全访问权限并创建文件的配置文件。

标签: python amazon-web-services tensorflow amazon-s3


【解决方案1】:

我在尝试从 Sagemaker 笔记本访问私有 S3 存储桶中的文件时遇到了同样的问题。我犯的错误是尝试使用从 boto3 获得的凭据,这在外面似乎无效。

解决方案不是指定凭据(在这种情况下,它使用附加到机器的角色),而是指定区域名称(由于某种原因它没有从~/.aws/config 文件中读取它),如下所示:

import boto3
import os

session = boto3.Session()
os.environ['AWS_REGION']=session.region_name

注意:在调试此错误时,查看 CloudWatch 日志很有用,因为 S3 客户端的日志仅在此处打印,而不是在 Jupyter 笔记本中。 在那里我第一次看到:

  1. 当我从 boto3 指定凭据时,错误是:The AWS Access Key Id you provided does not exist in our records.
  2. 在没有设置AWS_REGION env 变量集的情况下访问时,我有The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.,这显然在您不指定存储桶时很常见(请参阅301 Moved Permanently after S3 uploading

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 2021-09-24
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多