当源为S3存储桶

时间:2016-08-01 19:12:29

标签: amazon-web-services amazon-s3 amazon-cloudfront

我用一些文件创建了s3存储桶。我使用该S3存储桶创建了CloudFront分配,并将状态更改为已部署。

当我为任何文件卷曲CloudFront时:

<Error><Code>TemporaryRedirect</Code><Message>Please re-send this request to the specified temporary endpoint. Continue to use the original request endpoint for future requests.</Message><Bucket>MY-BUCKET</Bucket><Endpoint>MY-BUCKET.s3-eu-west-1.amazonaws.com</Endpoint><RequestId>...</RequestId><HostId>...</HostId></Error>

当我为任何文件卷曲我的S3存储桶时,我得到了该文件内容。

我做错了什么?如何强制cloudfront缓存文件,以便客户不需要直接从S3获取数据?

2 个答案:

答案 0 :(得分:36)

Thx Matt Houser从评论到我的第一篇文章!

当分发尚未完全准备好时,CloudFront似乎缓存了我对文件的第一个请求(但当时它处于已部署状态,所以要小心!)。我要求对缓存中的所有文件进行无效,花了几分钟,但在失效后,所有文件都使用CloudFront网址使用http 200卷曲。

Michael-sqlbot评论后,问题变得清晰了:

  

所有存储桶至少有两个REST端点主机名。在欧洲西部1号,   他们是example-bucket.s3-eu-west-1.amazonaws.com和   example-bucket.s3.amazonaws.com。第一个将立即   创建存储桶时有效。第二个 - 有时提到   作为“全球终点” - 这是CloudFront使用的一个 -   不会,除非桶在us-east-1。过了几秒钟   到分钟,根据位置和其他因素变化,它变成了   全球可访问。在此之前,307重定向是   回。因此,水桶还没准备好。

答案 1 :(得分:6)

只是要澄清一点,如果发生在您身上,有几种选择:

  • 请等待up to 24h,以使更改完全传播。

  • 将您的存储桶位置更改为us-east-1区域。

  • 但是最简单的方法可能是将CloudFront原始域名从<bucket>.s3.amazonaws.com切换为<bucket>.s3-<region>.amazonaws.com

转到“分发设置”->“起源和起源组”并编辑当前起源

例如,在us-west-2区域中有一个名为stackoverflow的存储桶,它将变成

stackoverflow.s3-us-west-2.amazonaws.com