ライフサイクルフックを追加する - Amazon EC2 Auto Scaling

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ライフサイクルフックを追加する

Auto Scaling インスタンスを待機状態にしてカスタムアクションを実行するために、Auto Scaling グループにライフサイクルフックを追加できます。カスタムアクションは、インスタンスの起動時または終了前に実行されます。インスタンスは、ライフサイクルアクションが完了するまで、またはタイムアウト期間が終了するまで待機状態のままになります。

から Auto Scaling グループを作成したら AWS Management Console、1 つ以上のライフサイクルフックを追加でき、最大合計 50 個のライフサイクルフックを追加できます。 AWS CLI、、または SDK を使用して AWS CloudFormation、作成時に Auto Scaling グループにライフサイクルフックを追加することもできます。

デフォルトでは、コンソールにライフサイクルフックを追加すると、Amazon EC2 Auto Scaling はライフサイクルイベント通知を Amazon に送信します EventBridge。 EventBridge またはユーザーデータスクリプトを使用することが推奨されるベストプラクティスです。Amazon SNS または Amazon SQS に直接通知を送信するライフサイクルフックを作成するには、このトピックの例にあるように、put-lifecycle-hook コマンドを使用できます。

ライフサイクルフックを追加する (コンソール)

Auto Scaling グループにライフサイクル フックを追加するには、次の手順に従います。スケールアウト (インスタンスの起動) とスケールイン (インスタンスの終了またはウォーム プールへの復帰) のためのライフサイクルフックを追加するには、2 つの個別のフックを作成する必要があります。

作業を開始する前に、「ライフサイクルフックを Auto Scaling グループに追加するための準備」で説明されているように必要に応じてカスタムアクションがセットアップされていることを確認してください。

スケールアウト用のライフサイクルフックを追加するには
  1. https://console.aws.amazon.com/ec2/ でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。

  2. Auto Scaling グループの横にあるチェックボックスを選択します。ページの下部にスプリットペインが開きます。

  3. [Instance management (インスタンス管理)] タブの [Lifecycle hooks (ライフサイクルフック)] で、[Create lifecycle hook (ライフサイクルフックを作成)] を選択します。

  4. スケールアウト (インスタンスが起動) のライフサイクルフックを定義するには、以下を実行してください。

    1. [Lifecycle hook name (ライフサイクルフック名)] で、ライフサイクルフックの名前を指定します。

    2. [Lifecycle transition (ライフサイクルの移行)] で、[Instance launch (インスタンスの起動)] を選択します。

    3. [ハートビートのタイムアウト] には、スケールアウト時にフックがタイムアウトするまで待機状態を維持する時間を秒単位で指定します。この時間の範囲は 307200 秒です。タイムアウト期間を長く設定すると、カスタムアクションが完了する時間が長くなります。その後、タイムアウト期間終了前に終了した場合は、complete-lifecycle-action コマンドを送信して、インスタンスが次の状態に進むことを許可します。

    4. [Default result] (デフォルトの結果) には、ライフサイクルフックのタイムアウト時間を過ぎた場合、または予期しない障害が発生した場合に実行するアクションを指定します。[続行] または 中止 のどちらかを選択できます。

      • [続行] を選択すると、Auto Scaling グループは他のライフサイクル フックを続行し、インスタンスをサービスに投入できます。

      • [中止] を選択する場合、Auto Scaling グループは残りのアクションをすべて停止し、インスタンスをただちに終了します。

    5. (オプション) [通知メタデータ] には、Amazon EC2 Auto Scaling が通知ターゲットにメッセージを送信するときに含めるその他の情報を指定します。

  5. [作成] を選択します。

スケールイン用のライフサイクルフックを追加するには
  1. スケールアウト用のライフサイクル フックを作成した後、[ライフサイクル フックの作成] を選択して、中断したところから続行します。

  2. スケールイン (インスタンスを終了またはウォームプールに戻す) のライフサイクルフックを定義するには、以下を実行してください。

    1. [Lifecycle hook name (ライフサイクルフック名)] で、ライフサイクルフックの名前を指定します。

    2. [Lifecycle transition (ライフサイクルの移行)] で、[Instance terminate (インスタンスの終了)] を選択します。

    3. [ハートビートのタイムアウト] には、スケールアウト時にフックがタイムアウトするまで待機状態を維持する時間を秒単位で指定します。から EC2 ログを取得するなど、最終タスクの実行に必要な時間に応じて、30120秒の短いタイムアウト期間をお勧めします CloudWatch。

    4. [Default result] (デフォルトの結果) には、タイムアウト時間を超過した、または予期しない失敗が発生した場合に Auto Scaling グループが実行するアクションを指定します。[ABANDON] (中止) と [CONTINUE] (続行) は、どちらもインスタンスを終了します。

      • [CONTINUE] (続行) を選択する場合、Auto Scaling グループは、終了前に他のライフサイクルフックなどの残りのアクションを続行できます。

      • [中止] を選択すると、Auto Scaling グループはインスタンスをただちに終了します。

    5. (オプション) [通知メタデータ] には、Amazon EC2 Auto Scaling が通知ターゲットにメッセージを送信するときに含めるその他の情報を指定します。

  3. [Create] を選択します。

ライフサイクルフックを追加する (AWS CLI)

[put-lifecycle-hook] コマンドを使用して、ライフサイクルフックを作成および更新ができます。

スケールアウトでアクションを実行するには、以下のコマンドを使用します。

aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-launch-hook \ --auto-scaling-group-name my-asg \ --lifecycle-transition autoscaling:EC2_INSTANCE_LAUNCHING

スケールインでアクションを実行するには、以下のコマンドを使用します。

aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \ --auto-scaling-group-name my-asg \ --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING

Amazon SNS または Amazon SQS を使用して通知を受信するには、--notification-target-arn および --role-arn オプションを追加します。

以下の例は、my-sns-topic という名前の SNS トピックを通知ターゲットとして指定するライフサイクルフックを作成します。

aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \ --auto-scaling-group-name my-asg \ --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \ --notification-target-arn arn:aws:sns:region:123456789012:my-sns-topic \ --role-arn arn:aws:iam::123456789012:role/my-notification-role

トピックは、以下のキーと値のペアが含まれたテスト通知を受け取ります。

"Event": "autoscaling:TEST_NOTIFICATION"

デフォルトで、put-lifecycle-hook コマンドは、ハートビートタイムアウトが 3600 秒 (1 時間) のライフサイクルフックを作成します。

既存のライフサイクルフックのハートビートタイムアウトを変更するには、以下の例にあるように、--heartbeat-timeout オプションを追加します。

aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \ --auto-scaling-group-name my-asg --heartbeat-timeout 120

インスタンスがすでに待機状態になっている場合は、record-lifecycle-action-heartbeat CLI コマンドを使用して、ハートビートを記録することによってライフサイクルフックがタイムアウトしないようにすることができます。これにより、ライフサイクルフックを作成するときに指定するタイムアウト時間によってタイムアウト期間が延長されます。タイムアウト期間が終わる前に終了した場合は、インスタンスが次の状態に進むことを許可する complete-lifecycle-action CLI コマンドを送信することができます。詳細な説明と例については、「ライフサイクルアクションを完了する」を参照してください。