Amazon s3 使用S3和x2B的维护模式;云锋

Amazon s3 使用S3和x2B的维护模式;云锋,amazon-s3,amazon-cloudfront,Amazon S3,Amazon Cloudfront,我提供的是一个单页应用程序,托管在S3上,并通过CloudFront向web公开。当我在API上执行维护时,我希望有一个手动开关,使对我的应用程序的请求呈现维护页面 我可以将维护HTML(或json)放到S3中。当我打开维护模式时,如何配置CloudFront以返回维护站点?您可以在CloudFront上执行一系列特定文件,但这意味着您必须在维护期间覆盖当前web应用,然后在备份后将其还原(并再次失效) 我认为最好的解决方案是在应用程序中添加对维护模式的支持,并定期(以及在服务不可用时的错误)检

我提供的是一个单页应用程序,托管在S3上,并通过CloudFront向web公开。当我在API上执行维护时,我希望有一个手动开关,使对我的应用程序的请求呈现维护页面

我可以将维护HTML(或json)放到S3中。当我打开维护模式时,如何配置CloudFront以返回维护站点?

您可以在CloudFront上执行一系列特定文件,但这意味着您必须在维护期间覆盖当前web应用,然后在备份后将其还原(并再次失效)

我认为最好的解决方案是在应用程序中添加对维护模式的支持,并定期(以及在服务不可用时的错误)检查某个地方的标志(通常是通过CloudFront提供的具有较短最长期限的静态文件)如果它说您处于维护模式,请冻结应用程序并显示一个对话框,告诉用户API正在维护中,或者锁定需要API访问的功能,如果可能的话,让用户继续对缓存数据使用只读访问


使用后一种解决方案,您只需将一个文件上载到S3,并记住在完成后再次删除/替换它-您甚至可以包含一条消息(可能是更改日志?),该应用程序会显示给您的用户。

创建一个Lambda@Edge生成静态“维护”响应的函数:

当您想要激活它时,选择查看器请求触发器,并在设置页面上使用Lambda函数的ARN来返回维护消息的缓存行为,并保存更改。要停用它,请将其删除。变更通常在很短的时间内处理

这将实现您的目的,因为查看器请求触发器在检查CloudFront缓存之前触发,并且如果它生成响应,则响应将在不检查缓存的情况下返回,并且生成的响应不会存储在CloudFront缓存中——因此,移除触发器后,任何缓存内容都将仍然存在


请注意,第一次实际将这样的函数与CloudFront发行版关联时,我认为您需要在Lambda控制台中“启用触发器和复制”,以便在CloudFront需要时可以全局访问Lambda函数。在测试时,您不必将它与“真正的”CloudFront发行版相关联——您可以创建第二个版本进行测试——但函数版本需要经历这个复制周期,才能在CloudFront控制台中使用。与一起使用的函数Lambda@Edge必须在us-east-1区域中创建,然后复制到所有区域,以便CloudFrontEdge可以通过其最近的区域调用它。Lambda@Edge函数始终由其数字版本id引用。函数别名,包括魔术字符串
$LATEST
,不被Lambda@Edge.

不错!这就是我想要的。谢谢。@Maticjurlič太好了。我在结尾添加了另一个注释,可能会为您节省一些疑难解答。