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 進行故障轉移程序。