Question#42(SAP-C02)
ある会社は、複数の Amazon EC2 インスタンスを Auto Scaling グループで起動し、Application Load Balancer(ALB)の背後でアプリケーションをホストしています。EC2 インスタンスは初回の起動時にユーザーデータのスクリプトを実行して、アプリケーションに必須なコンテンツを Amazon S3 バケットからダウンロードします。
EC2 インスタンスは正しく起動していますが、しばらくすると次のエラーメッセージとともに終了(Terminate)されます:「ELB システムのヘルスチェックに失敗したため、インスタンスが運用から外されました」。このため、Auto Scaling イベントにより EC2 インスタンスが起動と終了を繰り返す無限ループが発生しています。 直近の変更は、会社が S3 バケットに大量の必須コンテンツを追加したことだけです。会社は本番のユーザーデータスクリプトを変更したくありません。 本番環境が正常にデプロイできるように、ソリューションアーキテクトはどうすべきですか?正解:D
今回のループは、起動直後にユーザーデータで S3 から大量のコンテンツをダウンロードする処理が追加分のデータにより長引き、アプリケーションがまだリッスン開始できていない段階で ALB のヘルスチェックに失敗してしまうことが原因です。Auto Scaling グループは ALB の「不健康」判定を受けてインスタンスを終了し、再度起動するため、結果として無限ループになります。
ヘルスチェック猶予期間(Health Check Grace Period)を延ばすと、インスタンス起動直後の一定時間はヘルスチェック結果を評価しないため、ユーザーデータの初期化処理(コンテンツのダウンロード・セットアップ)が完了してアプリケーションが応答可能になるまで待てるようになります。ユーザーデータを変更せずに、起動〜安定稼働までのウォームアップを吸収する、まさにこの種の事象に対する推奨手段です。
コメント