静的 Web サイトホスティングを有効にして 2 つのバケットを作成し、クロスリージョンレプリケーションが有効になっていて、オブジェクトが宛先バケットにレプリケートされていることを確認します。
CloudFront ディストリビューションを作成し、プライマリ S3 バケットをオリジンとして使用します。
ヘルス チェック オブジェクトのパス (例: d123456789.cloudfront.net/healthcheck.txt) を含む、CF ディストリビューションの CNAME をターゲットとする新しい R53 ヘルス チェックを作成します (d123456789.cloudfront.net も機能します)。
[ヘルス チェック] の下の [詳細構成] を展開し、要求間隔を標準 (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"
SNS が関数を呼び出すための Lambda 呼び出し権限を作成します。
aws lambda add-permission --function-name "YourLambdaARN" --statement-id "HealthCheck_SNS_Lambda" --action "lambda:InvokeFunction" --principal "sns.amazonaws.com" --source-arn "YourSNSTopicARN"
両方のバケット ポリシーでバケットに対するパブリック読み取りアクセスが許可されていることを確認してください。
存在しないオブジェクトに対する URI クエリに対する 403 応答が表示されないようにするには、新しい error.html ページをソース バケットにアップロードします。
S3 -> Bucket -> Properties -> Static website hosting -> Error document
キャッシュ制御ヘッダーを no-cache に設定して、ヘルス チェック オブジェクトを元の S3 バケットにアップロードします (これは、R53 ヘルスチェックでの誤検知を無効にするのに役立ちます)。
aws s3 cp "local/path/healthcheck.txt" "s3://bucketName/healthcheck.txt" --cache-control no-cache
権限を変更するかヘルスチェックオブジェクトを削除して、バケットの障害をシミュレートします。これにより、R53 ヘルスチェックが失敗し、フェイルオーバー手順のために SNS/Lambda がトリガーされます。