

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

# Amazon EC2 Auto Scaling のライフサイクルフック
<a name="lifecycle-hooks"></a>

Amazon EC2 Auto Scaling は、Auto Scaling グループにライフサイクルフックを追加する機能を提供します。これらのフックにより、Auto Scaling インスタンスライフサイクルのイベントを認識し、対応するライフサイクルイベントが発生したときにカスタムアクションを実行するソリューションを作成できます。ライフサイクルフックでは、インスタンスが次の状態に移行する前に、ライフサイクルアクションの完了を待つ時間 (デフォルトでは 1 時間) が指定されます。

Auto Scaling インスタンスでライフサイクルフックを使用する例として、以下を実行します。
+ スケールアウト イベントが発生すると、新しく起動したインスタンスはスタートアップ シーケンスを完了し、待機状態に移行します。インスタンスが待機状態の間に、アプリケーションに必要なソフトウェアパッケージをダウンロードしてインストールするスクリプトを実行して、トラフィックの受信をスタートする前に、インスタンスの準備がすべて完了していることを確認できます。スクリプトがソフトウェアのインストールを終了すると、**complete-lifecycle-action**コマンドを実行して続行します。
+ スケールイン イベントが発生すると、ライフサイクルフックによってインスタンスが終了される前に一時停止され、Amazon EventBridge を使用して通知が送信されます。インスタンスが待機状態にある間は、 AWS Lambda 関数を呼び出したり、インスタンスに接続して、インスタンスが完全に終了する前にログやその他のデータをダウンロードしたりできます。

ライフサイクルフックの一般的な使用方法は、インスタンスが Elastic Load Balancing に登録されるタイミングを制御することです。Auto Scaling グループに起動ライフサイクルフックを追加すると、ライフサイクルフックの最後にロードバランサーに登録される前に、ブートストラップスクリプトが正常に完了していて、インスタンス上のアプリケーションがトラフィックを受け入れる準備ができていることを確認できます。

**Topics**
+ [ライフサイクルフックの可用性](#lifecycle-hooks-availability)
+ [考慮事項と制限事項](#lifecycle-hook-considerations)
+ [関連リソース](#lifecycle-hook-related-resources)
+ [Auto Scaling グループでのライフサイクルフックの仕組み](lifecycle-hooks-overview.md)
+ [ライフサイクルフックを追加するための準備](prepare-for-lifecycle-notifications.md)
+ [インスタンスライフサイクルポリシーを使用してインスタンスの保持を制御する](instance-lifecycle-policy.md)
+ [ターゲットライフサイクル状態を取得する](retrieving-target-lifecycle-state-through-imds.md)
+ [Auto Scaling グループにライフサイクル フックを追加する](adding-lifecycle-hooks.md)
+ [Auto Scaling グループでライフサイクルアクションを完了する](completing-lifecycle-hooks.md)
+ [チュートリアル: インスタンスメタデータを使用してライフサイクル状態を取得する](tutorial-lifecycle-hook-instance-metadata.md)
+ [チュートリアル:Lambda 関数を呼び出すライフサイクルフックの設定](tutorial-lifecycle-hook-lambda.md)

## ライフサイクルフックの可用性
<a name="lifecycle-hooks-availability"></a>

次の表は、さまざまなシナリオで利用できるライフサイクルフックを示しています。


| イベント | インスタンスの起動または終了¹ | [インスタンスの最大存続期間](asg-max-instance-lifetime.md): 置き換えインスタンス | [インスタンスの更新](asg-instance-refresh.md): 置き換えインスタンス | [キャパシティの再調整](ec2-auto-scaling-capacity-rebalancing.md): 置き換えインスタンス | [ウォームプール](ec2-auto-scaling-warm-pools.md): ウォームプールに出入りするインスタンス | 
| --- | --- | --- | --- | --- | --- | 
| インスタンスの起動 | ✓ | ✓ | ✓ | ✓ | ✓ | 
| インスタンスの削除 | ✓ | ✓ | ✓ | ✓ | ✓ | 

¹ 自動的に開始されたか、または手動で開始されたかにかかわらず (`SetDesiredCapacity` もしくは `TerminateInstanceInAutoScalingGroup` オペレーションを呼び出す場合など)、すべての起動と終了に適用されます。インスタンスのアタッチまたはデタッチ、インスタンスのスタンバイモードへの切り替え、または強制削除オプションを使用したグループの削除には適用されません。

## ライフサイクルフックの考慮事項と制限
<a name="lifecycle-hook-considerations"></a>

ライフサイクルフックを使用する場合は、以下の注意事項と制限事項に留意してください。
+ Amazon EC2 Auto Scaling は、Auto Scaling グループの管理に役立つ独自のライフサイクルを提供します。このライフサイクルは、他の EC2 インスタンスのライフサイクルとは異なります。詳細については、「[Amazon EC2 Auto Scaling インスタンスのライフサイクル](ec2-auto-scaling-lifecycle.md)」を参照してください。ウォームプール内のインスタンスには、[ウォームプール内のインスタンスのライフサイクル状態の移行](warm-pool-instance-lifecycle.md#lifecycle-state-transitions) で説明されている独自のライフサイクルもあります。
+  デフォルトでは、終了ライフサイクルフックはベストエフォートベースで動作します。終了ライフサイクルフックがタイムアウトまたは中止された場合、Amazon EC2 Auto Scaling はインスタンスの即時終了に進みます。終了ライフサイクルフックをインスタンス保持のインスタンスライフサイクルポリシーと組み合わせることができます。詳細については、「[インスタンスライフサイクルポリシーを使用してインスタンスの保持を制御する](instance-lifecycle-policy.md)」を参照してください。
+ スポットインスタンスによりライフサイクルフックを使用できますが、使用可能なキャパシティがなくなった場合、ライフサイクルフックはインスタンスの終了を防ぐことができません。これは、2 分間の中断通知により、いつでも起こり得ます。詳細については、『*Amazon EC2 ユーザーガイド*』の「[スポットインスタンス中断](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)」を参照してください。ただし、キャパシティの再調整を有効にして、Amazon EC2 スポットサービスから再調整のレコメンデーションを受け取ったスポットインスタンスを積極的に置換することができます。これは、スポットインスタンスの中断リスクが高まったときに送信される信号です。詳細については、「[リスクがあるスポットインスタンスを置き換えるための Auto Scaling でのキャパシティの再調整](ec2-auto-scaling-capacity-rebalancing.md)」を参照してください。
+ インスタンスは一定期間、待機状態に維持できます。ライフサイクルフックのデフォルトタイムアウトは 1 時間です (ハートビートタイムアウト)。インスタンスを待機状態に保つことができる最大時間を指定するグローバルタイムアウトもあります。グローバルタイムアウトは、48 時間か、ハートビートタイムアウトの 100 倍の時間のどちらか短い方になります。
+ ライフサイクルフックの結果は、中止または続行のどちらかになります。インスタンスが起動中の場合、「続行」はアクションが正常に実行され、Amazon EC2 Auto Scaling がインスタンスをサービス開始できることを示します。それ以外の場合、中止はカスタムアクションが失敗し、インスタンスを終了して置き換えることができることを示します。インスタンスが終了する場合、「中止」と「続行」の両方でインスタンスを終了できます。ただし、「中止」は他のライフサイクルフックなど残りのアクションをすべて停止し、「続行」は他のライフサイクルフックを完了することを許可します。
+ ライフサイクルフックが繰り返し失敗する場合、Amazon EC2 Auto Scaling はインスタンスの起動を許可する頻度を制限するので、ライフサイクルアクションをテストして永続的なエラーを修正するようにしてください。
+  AWS CLI、、または SDK を使用してライフサイクルフックを作成および更新すると CloudFormation、 からライフサイクルフックを作成するときに使用できないオプションが提供されます AWS マネジメントコンソール。例えば、コンソールには SNS トピックや SQS キューの ARN を指定するフィールドが表示されません。これは、Amazon EC2 Auto Scaling がすでに Amazon EventBridge にイベントを送信しているからです。これらのイベントはフィルタリングされ、必要に応じて Lambda、Amazon SNS、Amazon SQS などの AWS サービスにリダイレクトできます。
+ または AWS CLI CloudFormation SDK を使用して Auto Scaling グループの作成中に複数のライフサイクルフックを追加できます。 [CreateAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CreateAutoScalingGroup.html) ただし、各フックの通知ターゲットと IAM ロール (指定されている場合) が同じである必要があります。異なる通知ターゲットと異なるロールでライフサイクルフックを作成するには、[PutLifecycleHook](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PutLifecycleHook.html) API に対する別個の呼び出しで、ライフサイクルフックを 1 つずつ作成します。
+ インスタンス起動用のライフサイクルフックを追加すると、ヘルスチェックの猶予期間は、インスタンスが `InService` 状態に到達するとすぐに開始されます。詳細については、「[Auto Scaling グループにヘルスチェックの猶予期間を設定する](health-check-grace-period.md)」を参照してください。

**スケーリングに関する考慮事項**
+ 動的スケーリングポリシーは、複数のインスタンスから集計した、CPU やネットワーク I/O などの CloudWatch メトリックスデータに応じて、スケールインとスケールアウトを行います。スケールアウトしても、Auto Scaling グループで集計するインスタンスメトリックスに、Amazon EC2 Auto Scaling が新しいインスタンスを追加するわけではありません。インスタンスが `InService` 状態に到達し、ウォームアップが完了するまで待機します。詳細については、デフォルトインスタンスのウォームアップのトピックの「[パフォーマンスのスケーリングに関する考慮事項](ec2-auto-scaling-default-instance-warmup.md#scaling-performance-considerations)」を参照してください。
+ スケールインでは、終了するインスタンスの削除が集約インスタンスメトリックスに直ちに反映されない場合があります。Amazon EC2 Auto Scaling の終了ワークフローが開始すると、終了するインスタンスは、グループの集計インスタンスメトリクスへのカウントを停止します。
+ ほとんどの場合、ライフサイクルフックが呼び出されると、簡易スケーリングポリシーに起因するスケーリングアクティビティは、ライフサイクルアクションが完了し、クールダウン期間が終了するまで一時停止されます。クールダウン期間に長い間隔を設定すると、スケーリングが再開されるまでに時間がかかることになります。詳細については、クールダウントピックの「[追加の遅延を発生させる可能性のあるライフサイクルフック](ec2-auto-scaling-scaling-cooldowns.md#cooldowns-lifecycle-hooks)」を参照してください。一般的に、ステップスケーリングポリシーまたはターゲット追跡スケーリングポリシーを使用できる場合には、簡易スケーリングポリシーを使わないことをおすすめします。

## 関連リソース
<a name="lifecycle-hook-related-resources"></a>

紹介ビデオについては、[[AWS re: Invent 2018: Amazon EC2 Auto Scaling でキャパシティ管理を容易にする](https://youtu.be/PideBMIcwBQ?t=469)] の [*YouTube*] をご覧ください。

 CloudFormation スタックテンプレートでライフサイクルフックを宣言する方法を理解するために使用できる JSON および YAML テンプレートスニペットがいくつか用意されています。詳細については、「*AWS CloudFormation ユーザーガイド*」の「[AWS::AutoScaling::LifecycleHook](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-lifecyclehook.html)」のリファレンスを参照してください。

ライフサイクルフックのサンプルテンプレートとユーザーデータスクリプトは、[GitHub リポジトリ](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples)でダウンロードできます。

ライフサイクルフックの使用例については、次のブログ記事を参照してください。
+ [Lambda と Amazon EC2 Run コマンドを使用したスケーリングインスタンスのバックアップシステムの構築](https://aws.amazon.com/blogs/compute/building-a-backup-system-for-scaled-instances-using-aws-lambda-and-amazon-ec2-run-command/)
+ [EC2 Auto Scaling インスタンスを終了する前にコードを実行します](https://aws.amazon.com/blogs/infrastructure-and-automation/run-code-before-terminating-an-ec2-auto-scaling-instance/)。