使 CloudFront 上的主干索引缓存无效.html



我正在将CloudFront发行版指向我的BackboneJS应用程序。这包括索引.html、主.css、主.js。

步骤:

  1. 将 ?v=ID 附加到索引中的 css 和 js 链接.html
  2. 将索引.html、css、js 文件部署到源站。
  3. 使索引.html文件 @ CloudFront 无效
  4. 等待 CF 从服务器获取新的索引.html文件并加载新版本化的资产。

部署时,我可以通过在索引文件中应用新的查询字符串来破坏主.css和主.js缓存。不幸的是,索引.html文件缓存必须手动失效 - 亚马逊表示此过程可能需要10-15分钟。

在 CF 上立即将索引.html文件更改为最新版本的任何提示?

谢谢!

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

下面是一个使用 AWS CLI 失效并等待失效传播的 Bash 脚本:

# 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 行为,并将生存时间覆盖为零。

使 Cloudfront 缓存失效不是一个耗时的过程。这不会花费太长时间。不过,您可以通过多种方式监视失效状态。

您还可以让 lambda 函数在 cloudfront 完成缓存失效后更新下游组件/系统。

话虽如此,如果需要实时更新索引.html,您可以选择不将其作为 cloudfront 缓存的一部分包含在内。您可能希望在 cloudfront 的行为设置中进行设置。TTL 可以设置为 0。

最新更新