使用S3 + CloudFront的维护模式

Mat*_*lič 2 amazon-s3 amazon-cloudfront

我正在提供一个单页应用程序,该应用程序托管在S3上并通过CloudFront公开到Web。在对API进行维护时,我想进行一次手动切换,以导致对我的应用程序的请求呈现维护页面。

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

Mic*_*bot 5

创建Lambda @ Edge函数来生成静态“维护”响应:http : //docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html#lambda-examples-static-web-server

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

这将实现您的目的,因为查看器请求触发器检查CloudFront缓存之前触发,并且如果它生成响应,则不检查缓存就返回响应,并且生成的响应未存储在CloudFront缓存中-因此所有缓存的内容删除触发器后,它仍然会存在。

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