web-dev-qa-db-ja.com

OriginがS3バケットの場合、AWS CloudFrontはhttp 307を返します

いくつかのファイルで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バケットをカールすると、そのファイルの内容が取得されます。

私は何を間違えていますか?クライアントがS3から直接データを取得する必要がないように、Cloudfrontにファイルをキャッシュさせる方法は?

22
user3231055

Thx Matt Houserのコメントから私の最初の投稿へ!

CloudFrontは、配布の準備が完全に整っていないときにファイルへの最初のリクエストをキャッシュしたようです(ただし、その時点ではデプロイされた状態だったので注意してください!)。キャッシュ内のすべてのファイルに対して無効化を要求しましたが、数分かかりましたが、無効化が完了すると、CloudFront urlを使用してすべてのファイルがhttp 200でカールされました。

問題は、Michael-sqlbotからのコメントの後に明らかになりました。

すべてのバケットには、少なくとも2つのRESTエンドポイントホスト名があります。eu-west-1では、example-bucket.s3-eu-west-1.amazonaws.comおよびexample-bucket.s3です。 amazonaws.com。バケットが作成されると、最初のものはすぐに有効になります。2番目のもの(「グローバルエンドポイント」と呼ばれることもあります)は、CloudFrontが使用するものではありません。 -east-1。場所やその他の要因によって変化する秒から数分にわたって、グローバルにアクセスできるようになりますその前に、307リダイレクトが返されるため、バケットの準備ができていませんでした。

38
user3231055