我们已将几个zip文件上传到s3。所有都在数百MB范围内。
我们通常通过脚本下载文件,看来文件大小和类型都会发生变化。新文件大小通常约为300字节,下载后的文件类型为xml。
文件内容与此类似(为清晰起见,添加了空格):
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>gpdb-5.0.0.0/greenplum-db-5.0.0.0-rhel5-x86_64.zip</Key>
<RequestId>83D2047BDBA195A6</RequestId>
<HostId>tXKFaiRaNjD26j6fcrTjCk858PGBH2RAjLE1aO4+8hovD6mf+hUzJvCdWKKgrDJGaHXsjWbQP2A=</HostId>
</Error>
有关可能导致此问题的任何想法?它不会一直发生。这有些间歇性。
答案 0 :(得分:0)
正如您将在S3 API Reference中注意到的,这不是文件 - 这是一条错误消息。
S3中的文件称为对象,对象的路径+文件名称为对象键。
密钥是存储桶中对象的唯一标识符。存储桶中的每个对象只有一个密钥。 [...]通过Web服务端点,存储桶名称,密钥和可选的版本组合,可以唯一地解决Amazon S3中的每个对象。例如,在网址
http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl
中,“doc
”是广告素材的名称,“2006-03-01/AmazonS3.wsdl
”是关键字。http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#BasicsKeys
当您尝试访问该对象时,此错误消息应伴有404 Not Found
错误代码,表示存储桶中没有对象(路径+文件名)是显示的对象错误 - 您请求的错误。您应该能够在S3控制台中确认它不存在。
如果该对象应该在过去的某个时间上传,则此错误表示该对象未实际上传或随后被删除。
如果最近上传的对象非常(通常在几秒钟内),则不应该出现此错误,但可能会在以下两个条件之一发生此错误:
GET
或HEAD
请求来检查对象是否存在,则上传该对象。如果这样做,由于S3内部的内部优化,在访问对象之前可能会经过很短的时间。当你试图获取一个不存在的对象时,S3可能 - 在短时间内 - 有一个内部概念,即该对象不在那里,即使它已被安全存储。重试您的请求。这些条件有点不常见,但是它们可能会发生,特别是如果你的存储桶有很多流量,由于S3的consistency model,这是在上传对象的性能,可靠性和即时可用性之间的工程权衡。最近下载了同一个对象,试图下载,删除或覆盖该对象。
如果您需要提交有关S3遇到的特定问题的支持请求,则错误响应中的<RequestId>
和<HostId>
代码是您可以提供给AWS支持的不透明诊断代码。 ..他们可以使用这些来查找具体请求并确定问题。它们不被视为敏感信息,因为它们在AWS之外没有任何意义。
在这种情况下,显然不需要联系AWS支持,因为您似乎只是尝试下载不在您尝试下载此特定文件的特定存储桶中的对象。如果您获得完全相同的文件的交替成功和失败,那是意外的,并且支持案例可能是有序的......但通常,S3中的内部错误应该导致非常不同的响应。