Créez 2 compartiments avec l'hébergement de site Web statique activé et assurez-vous que la réplication inter-régions est activée et que les objets sont répliqués vers le compartiment de destination.
Créez une distribution CloudFront et utilisez le compartiment S3 principal comme origine.
Créez une nouvelle vérification de l'état R53 ciblant le CNAME de la distribution CF (d123456789.cloudfront.net fonctionne également), y compris le chemin de l'objet de vérification de l'état (par exemple, d123456789.cloudfront.net/healthcheck.txt)
Développez Configuration avancée sous Contrôle de santé et définissez un intervalle de requête standard (30 secondes) et un seuil d'échec d'au moins 3.
Créez une nouvelle alarme et sélectionnez un sujet SNS existant ou nouveau (doit être dans la région US-EAST-1)
Créez une nouvelle fonction Lambda dans n'importe quelle région autre que US-EAST-1 à l'aide de s3_site_failover.py.
Créez un nouveau déclencheur SNS pour la fonction Lambda à l'aide des commandes CLI ci-dessous.
Créez un nouvel abonnement SNS pour la fonction Lambda :
aws sns subscribe --topic-arn "YourSNSTopicARN" --protocol lambda --notification-endpoint "YourLambdaARN" --region "us-east-1"
Créez des autorisations d'appel Lambda pour que SNS puisse appeler la fonction :
aws lambda add-permission --function-name "YourLambdaARN" --statement-id "HealthCheck_SNS_Lambda" --action "lambda:InvokeFunction" --principal "sns.amazonaws.com" --source-arn "YourSNSTopicARN"
Assurez-vous que les deux stratégies de compartiment autorisent un accès public en lecture au compartiment.
Téléchargez une nouvelle page error.html dans le compartiment source pour éviter de voir une réponse 403 pour les requêtes URI pour des objets inexistants.
S3 -> Bucket -> Properties -> Static website hosting -> Error document
Téléchargez un objet de vérification de l'état dans le compartiment Original S3 avec l'en-tête de contrôle du cache défini sur no-cache (cela aidera à annuler les faux positifs avec le contrôle de santé R53) :
aws s3 cp "local/path/healthcheck.txt" "s3://bucketName/healthcheck.txt" --cache-control no-cache
Simulez une défaillance de compartiment en modifiant l'autorisation ou en supprimant l'objet de vérification de l'état. Cela entraînera un échec du contrôle de santé R53 et le déclenchement de SNS/Lambda pour la procédure de basculement.