我在S3中部署了静态Web应用程序(SPA),我使用CloudFront为应用程序提供服务,并使用Route53路由域。现在,我希望Route53和cloudFront在各自的缓存中拥有最大的TTL。这样有一个similar question,但它已经过时了。
我的问题:
将 CloudFront缓存设置为一年(365天)是否合适,当S3发生任何新更新时,我们可以使用API或控制台?
假设Alias记录不经常更改,将 Route53 NS缓存设置为 2天(48小时)是正确的吗?如果我们必须改变,那么我们是否需要保持谨慎并等待2天才能反映出来。
我认为将Route53和CloudFront缓存设置为最大值将为用户提供最佳体验(低延迟)。请纠正我如果错了。
答案 0 :(得分:1)
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交换机没有麻烦。
一般来说,我同意你的做法。你牺牲了一些灵活性,但它通常是值得的。