AWS CloudFront возвращает http 307, когда источником является ведро S3

Я создал ведро s3 с некоторыми файлами. Я создал дистрибутив CloudFront с этим ведром S3 в качестве источника, и он изменил статус на развертывание.

Когда я скручиваю 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?

Ответы

Ответ 1

спасибо Matt Houser от комментария к моему первому сообщению!

Кажется, CloudFront кэшировал мои первые запросы к файлам, когда дистрибутив не был полностью готов (но он был в развернутом состоянии в то время, так что будьте осторожны!). Я запросил недействительность ко всем файлам, находящимся в кеше, потребовалось несколько минут, но после того, как была сделана недействительность, все файлы были свернуты с помощью http 200 с использованием URL-адреса CloudFront.

Проблема стала понятной после комментария от Michael-sqlbot:

Все ведра имеют как минимум два имени хоста REST. В eu-west-1, они являются примерами-bucket.s3-eu-west-1.amazonaws.com и example-bucket.s3.amazonaws.com. Первый будет немедленно действителен, когда создается ведро. Второй - иногда упоминается как "глобальная конечная точка" - которая используется одним CloudFront - не будет, если только ведро в нас - восток-1. В течение нескольких секунд до минут, переменная по местоположению и другим факторам, она становится глобально доступный также. До этого перенаправление 307 вернулся. Следовательно, ведро не было готово.