在 S3、cloudFront 和 Route53 中部署 Web 应用程序时的最佳实践

Best practices while deploying a web app in S3, cloudFront and Route53

我在 S3 中部署了一个静态 Web 应用程序 (SPA),我使用 CloudFront 为应用程序提供服务并使用 Route53 路由域。现在,我希望 Route53 和 cloudFront 在各自的缓存中具有最大 TTL。有这样的similar question,不过已经过时了

我的问题:

  1. CloudFront 缓存 设置为 一年(365 天) 是否合适以及何时对S3 发生,我们可以使用 API 或控制台使缓存无效?

  2. 假设Alias记录不经常变化,设置Route53NS缓存为2天(48小时) 正确吗?如果一定要改,那我们是不是要谨慎一点,等2天再反映。

我相信将 Route53 和 CloudFront 缓存设置为最大值将为用户提供最佳体验(低延迟)。如有不妥请指正

Q1: 如果您非常确定您的对象确实存在那么久,那么使用 CloudFront 缓存 1 年可能没问题。您始终可以使用 Web 控制台或使用如下脚本使您的对象无效:

#!/bin/sh
aws configure set preview.cloudfront true

INVALIDATION_ID=$(date +"%S")
INVALIDATION_JSON="{
    \"DistributionId\": \"<YOUR_DISTRIBUTION_ID>\",
    \"InvalidationBatch\": {
        \"Paths\": {
            \"Quantity\": 1,
            \"Items\": [
                \"/*\"
            ]
        },
        \"CallerReference\": \"$INVALIDATION_ID\"
    }
}"

aws cloudfront create-invalidation --cli-input-json "$INVALIDATION_JSON"

请注意,如果您需要使缓存失效,则不能使用户的浏览器缓存失效。所以我只会为文件选择一个像这样的高设置,我绝对确定它们不会改变(例如,视频)。

我发现根据 Google 的建议选择缓存时间很有用。你会 find some input here.

但是,我不会如此努力地缓存 SPA:我想您会经常在那里进行更改。

Q2: 我认为一般最佳做法是将 Route 53 TTL 设置为更高的数字。请记住,您不能那么快地切换 DNS。通常在 DNS 切换之前,只需提前几天将 TTL 降低到一个较低的数字。当您使用 AWS 时,使用 Alias-Resources 这应该不是什么大问题,DNS 切换很容易完成。

总的来说,我同意你的做法。您牺牲了一些灵活性,但这通常是值得的。