Amazon EC2 インスタンスが異常とマークされて、Auto Scaling の Terminating 状態に移行し、最終的には問題の原因を見つけられる前に終了します。

Auto Scaling グループからデタッチ中でシャットダウン中のインスタンスは Terminating 状態です。以降この状態のインスタンスは終了して、利用できなくなっています。

Auto Scaling グループにライフサイクルフックを追加して、インスタンスの状態が [Terminating] から [Terminating:Wait] に変わるようにします。この状態では、インスタンスにはその終了前にアクセスできるため、それらのインスタンスが異常とマークされている原因を特定できます。

重要なのは、インスタンスが [Terminating:Wait] 状態のときにスケーリングアクションが中断されることです。デフォルトでは、Auto Scaling の put-lifecycle-hook によって指定されない限り、heartbeat-timeout parameter インスタンスは 3,600 秒間(1 時間)[Terminating:Wait] 状態のままになります。受け入れられ最大値は 172,800 秒(48 時間)です。

ライフサイクルフックは AWS CLI と API を使用してのみ設定できます。以下の手順では、AWS CLI を使用した必要な SNS トピックと IAM のアクセス権限の作成など、ライフサイクルフックを設定するプロセスについて説明します。コンソールにより IAM と SNS を管理する場合、IAM については「ロールの作成」、SNS については「トピックの作成」を参照してください。

  1. ライフサイクル通知の送信先となる Auto Scaling の SNS トピックを作成します。以下の CLI の例では、SNS create-topic コマンドを呼び出して、SNS トピック ASNotifications を作成します。
         $ aws sns create-topic --name ASNotifications
  2. 返される Amazon Resource Name (ARN) を保存します。以下のような ARN が返されます。
         arn:aws:sns:us-west-2:123456789012:ASNotifications
  3. SNS トピックへのサブスクリプションを作成します。以下の例では、subscribe コマンドを呼び出して、user@amazon.com に E メールを送信するサブスクリプションを作成しています。
         $ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:ASNotifications
            --protocol email --notification-endpoint user@amazon.com

IAM のアクセス権限を設定するには、Auto Scaling から SNS トピックへのメッセージの送信を許可する IAM ロールを作成します。そのためには、適切なポリシーを含むテキストファイルを作成し、create-role コマンドでそのファイルを参照します。

  1. テキストエディターを使用して、assume-role.txt という名前のテキストファイルを作成します。
  2. 以下の内容をテキストファイルに貼り付け、そのファイルを保存します。
         {
            "Version":"2012-10-17",
            "Statement": [{
               "Sid": "",
               "Effect": "Allow",
               "Principal": {"Service": "autoscaling.amazonaws.com"},
               "Action": "sts:AssumeRole"
             }]
         }
  3. 以下の例では、create-role コマンドを実行して、assume-role.txt ファイルに保存されたポリシーから IAM ロール AS-Lifecycle-Hook-Role を作成しています。
         $ aws iam create-role --role-name AS-Lifecycle-Hook-Role --assume-role-policy-document file://assume-role.txt
    コマンド出力には、ロールの ARN が含まれています。必ず IAM ロールと SNS トピックの両方の ARN を保存してください。
  4. ライフサイクルフックイベントが発生したときに Auto Scaling からの SNS 通知の送信を許可するためのアクセス権限をそのロールに追加します。以下の例では、attach-role-policy コマンドを実行して、管理ポリシー AutoScalingNotificationAccessRole を IAM ロール AS-Lifecycle-Hook-Role にアタッチしています。
         $ aws iam attach-role-policy --role-name AS-Lifecycle-Hook-Role
            --policy-arn arn:aws:iam::aws:policy/service-role/AutoScalingNotificationAccessRole
    この管理ポリシーは以下のアクセス権限を与えます。
         {
            "Version":"2012-10-17",
            "Statement": [{
               "Effect": "Allow",
               "Resource": "*",
               "Action": [
                  "sqs:SendMessage",
                  "sqs:GetQueueUrl",
                  "sns:Publish"
               ]
            }]
         }

ライフサイクルフックは通知とアクセス権限の設定後に設定できます。以下の例では、put-lifecycle-hook コマンドを使用して、ライフサイクルフックを設定しています。

     $ aws autoscaling put-lifecycle-hook --lifecycle-hook-name AStroublshoot --auto-scaling-group-name MyASGroup
        --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
        --notification-target-arn arn:aws:sns:us-west-2:123456789012:ASNotifications
        --role-arn arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role

このコマンドは以下のタスクを実行します。

  • ライフサイクルフックに名前を付ける(AStroubleshoot)。
  • ライフサイクルフックが関連付けられている Auto Scaling グループを識別する(MyASGroup)。
  • インスタンスの終了のライフサイクルステージのフックを設定する(EC2_INSTANCE_TERMINATING)。
  • SNS トピックの ARN を指定する(arn:aws:sns:us-west-2:123456789012:ASNotifications)。
  • IAM ロールの ARN を指定する(arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role)。

このコマンドの実行前に、実際の Auto Scaling グループ名、SNS ターゲット ARN、IAM ロール ARN に置き換えてください。

ライフサイクルフックをテストするには、インスタンスを選択し、ウェブサービスを停止して、設定した ELB のヘルスチェックに失敗するようにします。インスタンスが [Terminating:Wait] 状態になり、SNS トピックへのサブスクリプションを作成したときに指定した E メールアドレスで SNS 通知が届きます。この通知には LifecycleActionToken が含まれています。このトークンを使用すると、record-lifecycle-action-heartbeat コマンドを実行して、インスタンスを保留状態に維持するか、complete-lifecycle-action コマンドを実行して、終了処理を続行できます。以下の例では、complete-lifecycle-action コマンドを呼び出して、インスタンスの終了処理を続行しています。

     $ aws autoscaling complete-lifecycle-action --lifecycle-hook-name my-lifecycle-hook
        --auto-scaling-group-name MyASGroup --lifecycle-action-result CONTINUE
        --lifecycle-action-token a0b1c23d-45e6-7f89-dcba-1234ab56c7d8

インスタンスを待機状態に維持する方法については、「インスタンスを待機状態に維持する」を参照してください。

Auto Scaling, トラブルシューティング, 終了の遅延, 異常, 待機状態, ライフサイクルフック


このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。