在CloudFront上使主干index.html的缓存无效

时间:2013-11-06 00:18:59

标签: caching backbone.js cdn amazon-cloudfront

我将CloudFront分配指向我的BackboneJS应用程序。这包括index.html,master.css,master.js。

步骤:

  1. 追加?v = ID到css& index.html
  2. 中的js链接
  3. 将index.html,css,js文件部署到源服务器。
  4. 使index.html文件@ CloudFront无效
  5. 等待CF从服务器获取新的index.html文件并加载新版本的资产。
  6. 部署时,我可以通过在索引文件中应用新的查询字符串来破坏master.css和master.js缓存。不幸的是,index.html文件缓存必须手动失效 - 亚马逊称这个过程可能需要10-15分钟。

    有关在CF上立即将index.html文件更改为最新版本的提示吗?

    谢谢!

2 个答案:

答案 0 :(得分:0)

根据个人经验,我可以告诉您CloudFront失效的时间不会太长。由于您的用户可能长时间不打开页面,因此您需要处理同时运行的多个版本的应用程序。

这是一个Bash脚本,可使用AWS CLI使其失效并等待失效传播:

# Invalidates the CloudFront cache,
# waits for invalidation to be propagated.
function invalidate_cache() {
  local invalidation
  local invalidation_id
  local distribution_id=$1
  local status=""

  invalidation=$(aws cloudfront create-invalidation --distribution-id "$distribution_id" --paths '/*')
  invalidation_id=$(jq -r .Invalidation.Id <<< "$invalidation")

  while [[ $status != "Completed" ]]; do
    echo "Waiting for CloudFront invalidation to complete..."
    sleep 1
    status=$(aws cloudfront get-invalidation --distribution-id "$distribution_id" --id "$invalidation_id"| jq -r .Invalidation.Status)
  done
}

如果出于某种原因您总是想确保index.html是新鲜的,那么就让CloudFront根本不缓存它。您可以为/index.html创建特定的CloudFront行为,并将生存时间覆盖为零。

答案 1 :(得分:0)

使Cloudfront缓存无效不是一个耗时的过程。不需要太长时间。但是,您可以通过多种方式来监视无效状态。

一旦云前端完成了对缓存的无效操作,您还可以使用lambda函数来更新下游组件/系统。

话虽如此,如果需要实时更新index.html,则可以选择不将其包含在Cloudfront缓存中。您可能需要在cloudfront的行为设置中进行设置。 TTL可以设置为0。