版本控制如何在 Amazon Cloudfront 上工作?
How does versioning work on Amazon Cloudfront?
我刚刚在 Amazon S3 上建立了一个静态网站。我也在使用 Cloudfront CDN 服务。
据亚马逊称,有两种方法可用于清除 Cloudfront 缓存:失效和版本控制。我的问题是关于后者的。
考虑以下示例:
我从我的 index.html
文件 link 到图像文件 (image.jpg
)。然后我决定更换图像。我用文件名上传第二张图片:image_2.jpg
并更改 index.html
文件中的 link。
更改会自动生效还是需要采取进一步措施?
如果已编辑和新上传的文件位于存储桶中而不是缓存中,什么会触发必要的更改?
您的云端配置有一个缓存 TTL,它会告诉您文件何时更新,而不管源何时更改。
如果您需要立即更新,请在您的 index.html
文件上使用失效功能
CloudFront 中的版本控制只不过是在对象名称中添加(或添加前缀)版本或 'folder' 存储对象的位置。
- 文件夹
v1
中的所有对象并使用 URL 之类的
https://xxx.cloudfront.net/v1/image.png
- 所有对象都在其名称中包含一个版本,例如 image_v1.png,并使用 URL,例如
https://xxx.cloudfront.net/image_v1.png
第二个选项通常需要更多工作,但您不需要上传不需要更新的新文件(=在存储环境中更便宜)。第一个解决方案通常更清晰,需要的工作更少。
使用 CloudFront 版本控制需要更多 S3 存储空间,但通常比创建许多失效更便宜。
另一种使缓存失效的方法是创建失效(可能很昂贵)。如果您真的不需要失效,而只是需要更快速的缓存刷新(默认 24 小时),那么您可以更新原始 TTL 设置(原始级别)或设置单个对象的缓存持续时间(对象级别)。
我会插话,以防其他人来这里寻找我所做的事情。您可以在启用 S3 版本控制的情况下设置 Cloudfront,如果您知道需要哪个版本,则可以参考特定的 S3 版本。我把它放在预签名的 Cloudfront URL 后面,并在 Java SDK 中结束:
S3Properties s3Properties... // Custom properties pulled from a config file
String cloudfrontUrl = "https://" + s3Properties.getCloudfrontDomain() + "/" +
documentS3Key + "?versionId=" + documentS3VersionId;
URL cloudfrontSignedUrl = new URL(CloudFrontUrlSigner.getSignedURLWithCannedPolicy(
cloudfrontUrl,
s3Properties.getCloudfrontKeypairId(),
SignerUtils.loadPrivateKey(s3Properties.getCloudfrontKeyfilePath()),
getPresignedUrlExpiration()));
我刚刚在 Amazon S3 上建立了一个静态网站。我也在使用 Cloudfront CDN 服务。
据亚马逊称,有两种方法可用于清除 Cloudfront 缓存:失效和版本控制。我的问题是关于后者的。
考虑以下示例:
我从我的 index.html
文件 link 到图像文件 (image.jpg
)。然后我决定更换图像。我用文件名上传第二张图片:image_2.jpg
并更改 index.html
文件中的 link。
更改会自动生效还是需要采取进一步措施?
如果已编辑和新上传的文件位于存储桶中而不是缓存中,什么会触发必要的更改?
您的云端配置有一个缓存 TTL,它会告诉您文件何时更新,而不管源何时更改。
如果您需要立即更新,请在您的 index.html
文件上使用失效功能
CloudFront 中的版本控制只不过是在对象名称中添加(或添加前缀)版本或 'folder' 存储对象的位置。
- 文件夹
v1
中的所有对象并使用 URL 之类的https://xxx.cloudfront.net/v1/image.png
- 所有对象都在其名称中包含一个版本,例如 image_v1.png,并使用 URL,例如
https://xxx.cloudfront.net/image_v1.png
第二个选项通常需要更多工作,但您不需要上传不需要更新的新文件(=在存储环境中更便宜)。第一个解决方案通常更清晰,需要的工作更少。
使用 CloudFront 版本控制需要更多 S3 存储空间,但通常比创建许多失效更便宜。
另一种使缓存失效的方法是创建失效(可能很昂贵)。如果您真的不需要失效,而只是需要更快速的缓存刷新(默认 24 小时),那么您可以更新原始 TTL 设置(原始级别)或设置单个对象的缓存持续时间(对象级别)。
我会插话,以防其他人来这里寻找我所做的事情。您可以在启用 S3 版本控制的情况下设置 Cloudfront,如果您知道需要哪个版本,则可以参考特定的 S3 版本。我把它放在预签名的 Cloudfront URL 后面,并在 Java SDK 中结束:
S3Properties s3Properties... // Custom properties pulled from a config file
String cloudfrontUrl = "https://" + s3Properties.getCloudfrontDomain() + "/" +
documentS3Key + "?versionId=" + documentS3VersionId;
URL cloudfrontSignedUrl = new URL(CloudFrontUrlSigner.getSignedURLWithCannedPolicy(
cloudfrontUrl,
s3Properties.getCloudfrontKeypairId(),
SignerUtils.loadPrivateKey(s3Properties.getCloudfrontKeyfilePath()),
getPresignedUrlExpiration()));