s3_static_site_failover
1.0.0
创建 2 个启用静态网站托管的存储桶,并确保启用跨区域复制并将对象复制到目标存储桶。
创建 CloudFront 分配并使用主 S3 存储桶作为源。
创建一个针对 CF 分发的 CNAME 的新 R53 运行状况检查(d123456789.cloudfront.net 也可以),包括运行状况检查对象的路径(例如 d123456789.cloudfront.net/healthcheck.txt)
展开运行状况检查下的高级配置,并将请求间隔设置为标准(30 秒),并将故障阈值设置为至少 3。
创建新警报并选择现有或新的 SNS 主题(必须位于 US-EAST-1 区域)
使用 s3_site_failover.py 在 US-EAST-1 以外的任何区域创建新的 Lambda 函数。
使用下面的 CLI 命令为 Lambda 函数创建新的 SNS 触发器。
为 Lambda 函数创建新的 SNS 订阅:
aws sns subscribe --topic-arn "YourSNSTopicARN" --protocol lambda --notification-endpoint "YourLambdaARN" --region "us-east-1"
创建 Lambda 调用权限以便 SNS 调用函数:
aws lambda add-permission --function-name "YourLambdaARN" --statement-id "HealthCheck_SNS_Lambda" --action "lambda:InvokeFunction" --principal "sns.amazonaws.com" --source-arn "YourSNSTopicARN"
确保两个存储桶策略都允许对存储桶进行公共读取访问。
将新的 error.html 页面上传到源存储桶中,以避免看到针对不存在对象的 URI 查询的 403 响应。
S3 -> Bucket -> Properties -> Static website hosting -> Error document
将运行状况检查对象上传到原始 S3 存储桶,并将缓存控制标头设置为无缓存(这将有助于消除 R53 运行状况检查的误报):
aws s3 cp "local/path/healthcheck.txt" "s3://bucketName/healthcheck.txt" --cache-control no-cache
通过更改权限或删除健康检查对象来模拟存储桶故障。这将导致 R53 运行状况检查失败并触发 SNS/Lambda 进行故障转移过程。