2017-01-06 9 views
1

У меня есть ведомое устройство AWS Simple Storage Service (S3), установленное как источник распространения AWS CloudFront CDN.AWS CloudFront и S3: Как сделать новый контент S3 доступным сразу же в CloudFront?

Когда новые бренды, которые никогда не существовали в ведре S3 или CloudFront (небольшие, < 50k), загружаются в ведро S3, они доступны почти сразу по запросу с ресурса S3, но занять 10 минут, чтобы стать доступный с ресурса CloudFront.

Как только изображения доступны в CloudFront, они быстро загружаются. Проблема в том, что изображения, похоже, занимают много времени, чтобы стать доступными в CloudFront.

Я уменьшил TTL до 0 для Min, Max и Default без заметных изменений.

  • Ожидается ли это?

  • Есть ли что-нибудь, что я могу сделать, чтобы ускорить это?

увольте

+1

основание недействительности объектов - http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html? – Igor

+0

@Igor Как это применимо? «Новый контент S3», о котором я говорю, - это не «обновленные» изображения, а совершенно новые изображения, которые никогда не существовали в ведре или дистрибутиве. Мое предыдущее понимание и понимание, полученное из статьи, определяют недействительность как удаление ресурса CloudFront, чтобы его можно было извлечь из источника. – CuriousChad

+0

Я склонен полагать, что это дубликат [AWS CloudFront и S3: как сделать новый контент S3 доступным сразу в CloudFront] (http://stackoverflow.com/a/35541525/1695906). Если у вас не установлен TTL для кеша ошибок, то это будет вашей проблемой. –

ответ

1

Да, это, как ожидается, - не существует не так много вы можете сделать по этому поводу, к сожалению.

Как указано @igor, вы можете сделать недействительность объекта. Я не уверен, если это действительно ускорит его, но вы можете попробовать. Вы можете сделать это, настроив события с S3 на Lambda и вызвав CloudFront, чтобы сделать недействительным этот объект, или вы можете называть его бок о бок с вызовом выгрузки, который вы делаете - развязка с Lambda лучше, но что угодно.

Все файлы, которые идут на S3, должны быть доступны через S3, очевидно, не ограничивайте доступ к ведерке при включении слоя CloudFront. Вы можете сделать запрос S3 GET немного быстрее, включив также Accelerated Transfer (если вы хотите получить более быстрый запрос «прямо на S3», не имеет никакого эффекта, если вы используете CloudFront)

Я бы рекомендовал сделать перерыв, говорит:

function getFromS3() 
    serveFileToUser() 

function getFromCloudFrontEndpoint() 
    if !exists 
     getFromS3() 
    else 
     serveFileToUser() 
+0

Спасибо! Я буду экспериментировать с чем-то подобным. – CuriousChad

+0

Неправильное использование. В комментариях указывается, что речь идет о ** новых ** объектах.Нет причин ожидать каких-либо задержек с правильной конфигурацией. * «Всегда обрабатывайте CloudFront как конечную среду согласованности. Он должен запускать эти файлы по всему миру». * Нет. CloudFront не продвигает контент нигде. CloudFront - это сквозной кеш. Когда вы запрашиваете объект через ребро, край извлекает содержимое из источника - в реальном времени - если он уже не кэширован на этом краю из-за предыдущего запроса (и не истек) - и возвращает его. –

+0

Кроме того, S3 Transfer Acceleration не оказывает никакого влияния. Это не очевидно из документов, но функция S3 Transfer Acceleration фактически выполняется S3, незаметно для пользователя, используя геоданные для маршрутизации запросов между браузером и ведром поверх * инфраструктуры CloudFront * (но без кэширования). CloudFront не выиграет, выполнив запросы через свою инфраструктуру дважды. –

Смежные вопросы