

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

# Auto Scaling グループにライフサイクル フックを追加する
<a name="adding-lifecycle-hooks"></a>

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

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

デフォルトでは、コンソールでライフサイクルフックを追加すると、Amazon EC2 Auto Scaling は Amazon EventBridge にライフサイクルイベント通知を送信します。EventBridge またはユーザーデータスクリプトの使用は、推奨されるベストプラクティスです。このトピックの例に示すように、通知を Amazon SNS、Amazon SQS、または AWS Lambda [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html) コマンドに直接送信するライフサイクルフックを作成するには。

**Topics**
+ [ライフサイクルフックを追加する (コンソール)](#adding-lifecycle-hooks-console)
+ [ライフサイクルフックを追加する (AWS CLI)](#adding-lifecycle-hooks-aws-cli)

## ライフサイクルフックを追加する (コンソール)
<a name="adding-lifecycle-hooks-console"></a>

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

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

**スケールアウト用のライフサイクルフックを追加するには**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) でAmazon EC2 コンソールを開き、ナビゲーションペインで [**Auto Scaling グループ**] を選択します。

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

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

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

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

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

   1. **[ハートビートのタイムアウト]** には、スケールアウト時にフックがタイムアウトするまで待機状態を維持する時間を秒単位で指定します。この時間の範囲は `30`～`7200` 秒です。タイムアウト期間を長く設定すると、カスタムアクションが完了する時間が長くなります。その後、タイムアウト期間終了前に終了した場合は、[complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html) コマンドを送信して、インスタンスが次の状態に進むことを許可します。

   1. **[Default result]** (デフォルトの結果) には、ライフサイクルフックのタイムアウト時間を過ぎた場合、または予期しない障害が発生した場合に実行するアクションを指定します。**[続行]** または **中止** のどちらかを選択できます。
      + **[続行]** を選択すると、Auto Scaling グループは他のライフサイクル フックを続行し、インスタンスをサービスに投入できます。
      + **[中止]** を選択する場合、Auto Scaling グループは残りのアクションをすべて停止し、インスタンスをただちに終了します。

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

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

**スケールイン用のライフサイクルフックを追加するには**

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

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

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

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

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

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

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

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

## ライフサイクルフックを追加する (AWS CLI)
<a name="adding-lifecycle-hooks-aws-cli"></a>

[[put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html)] コマンドを使用して、ライフサイクルフックを作成および更新ができます。

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

```
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` オプションを追加します。を使用して通知を受信するには AWS Lambda、 を追加します`--notification-target-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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html) コマンドは、ハートビートタイムアウトが `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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/record-lifecycle-action-heartbeat.html) CLI コマンドを使用して、ハートビートを記録することによってライフサイクルフックがタイムアウトしないようにすることができます。これにより、ライフサイクルフックを作成するときに指定するタイムアウト時間によってタイムアウト期間が延長されます。タイムアウト期間が終わる前に終了した場合は、インスタンスが次の状態に進むことを許可する [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html) CLI コマンドを送信することができます。詳細な説明と例については、[Auto Scaling グループでライフサイクルアクションを完了する](completing-lifecycle-hooks.md) を参照してください。