

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

# インスタンスライフサイクルポリシーを使用してインスタンスの保持を制御する
<a name="instance-lifecycle-policy"></a>

 インスタンスライフサイクルポリシーは、終了ライフサイクルアクションが中止されたときの Amazon EC2 Auto Scaling の終了に対する保護を提供します。ライフサイクルフックのみとは異なり、インスタンスライフサイクルポリシーは、正常なシャットダウン手順が正常に完了しなかった場合にインスタンスが保持状態に移行するように設計されています。

## インスタンスライフサイクルポリシーを使用するタイミング
<a name="when-to-use-instance-lifecycle-policies"></a>

 アプリケーションの正常なシャットダウンがオプションではなく必須であり、シャットダウンに失敗した場合に手動による介入が必要な場合は、インスタンスライフサイクルポリシーを使用します。一般的ユースケースには以下が含まれます。
+  終了前にデータの永続化を完了する必要があるステートフルアプリケーション。
+  ライフサイクルフックの最大タイムアウトである 48 時間を超える可能性のある延長ドレイン期間を必要とするアプリケーション。
+  クリーンアップが失敗または不完全な場合に機密データを処理するワークロードは、データの損失や破損につながる可能性があります。
+  突然のシャットダウンが可用性に影響を与えるミッションクリティカルなサービス。

 インスタンスの終了を適切に処理する方法の詳細については、「」を参照してください[インスタンスの終了を的確に処理するようにアプリケーションを設計する](gracefully-handle-instance-termination.md)。

## インスタンスライフサイクルポリシーが終了ライフサイクルフックと連携する方法
<a name="how-instance-lifecycle-policies-work"></a>

 インスタンスライフサイクルポリシーは、代替としてではなく、終了ライフサイクルフックと組み合わせて機能します。このプロセスにはいくつかの段階があります。

1.  **終了ライフサイクルアクションが実行されます。**Amazon EC2 Auto Scaling が終了するインスタンスを選択すると、終了ライフサイクルフックが呼び出され、インスタンスは `Terminating:Wait`状態になり、終了ライフサイクルアクションの実行を開始します。

1.  **正常なシャットダウンの試行が開始されます。**アプリケーションは、インスタンス上またはコントロールプレーンを介して実行され、終了ライフサイクルアクション通知を受け取り、接続のドレイン、進行中の作業の完了、データ転送などの正常なシャットダウン手順を開始します。

1.  **終了ライフサイクルアクションが完了しました。**終了ライフサイクルアクションは、 `CONTINUE`または `ABANDON`の結果で完了できます。

1.  **インスタンスライフサイクルポリシーは状況を評価します。**インスタンスライフサイクルポリシーを設定しないと、終了ライフサイクルアクションが`ABANDON`結果とともに完了した場合でも、インスタンスは直ちに終了に進みます。でインスタンスを保持するように設定されたインスタンスライフサイクルポリシーでは`TerminateHookAbandon`、終了ライフサイクルアクションが`ABANDON`結果とともに完了すると、インスタンスは保持状態に移行します。

1.  **保持されたインスタンスは手動アクションを待機しています。**保持状態のインスタンスには、引き続き標準の Amazon EC2 料金が発生します。これらのインスタンスは Auto Scaling グループの希望する容量にはカウントされないため、Auto Scaling は必要なサイズを維持するために代替インスタンスを起動します。インスタンスの更新やインスタンスの最大有効期間などの Auto Scaling 機能も、保持されているインスタンスを無視します。これにより、クリーンアップ手順を手動で完了したり、データを復元したり、インスタンスを手動で終了する前に自動シャットダウンが失敗した理由を調査したりできます。

1.  **手動終了が発生します。**保持されたインスタンスで必要なアクションを完了したら、 `TerminateInstanceInAutoScalingGroup` API を呼び出してインスタンスを終了する必要があります。

# インスタンスの保持を設定する
<a name="configure-instance-retention"></a>

終了ライフサイクルアクションが失敗したときにインスタンスを保持するように Amazon EC2 Auto Scaling グループを設定します。

 Auto Scaling グループでインスタンスライフサイクルポリシーを使用するには、終了ライフサイクルフックも設定する必要があります。インスタンスライフサイクルポリシーを設定しても、終了ライフサイクルフックがない場合、ポリシーは効果がありません。インスタンスライフサイクルポリシーは、終了ライフサイクルアクションが中止された場合にのみ適用され、`CONTINUE`結果が正常に完了した場合は適用されません。

 インスタンスライフサイクルポリシーは、保持トリガーを使用して、インスタンスを保持するタイミングを決定します。`TerminateHookAbandon` トリガーにより、いくつかのシナリオで保持されます。
+  `ABANDON` 結果を使用して [ CompleteLifecycleAction ](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html) API を明示的に呼び出す場合。
+  ハートビートを受信せずにハートビート`ABANDON`タイムアウトに達したために、デフォルトの終了ライフサイクルアクションがタイムアウトした場合。
+  デフォルトの結果 を持つ終了ライフサイクルアクションでグローバルタイムアウトに達すると`ABANDON`、48 時間またはハートビートタイムアウトの 100 倍のいずれか小さい方になります。

------
#### [ Console ]

**インスタンスの保持を設定するには**

1. Amazon EC2 Auto Scaling コンソールを開く

1. Auto Scaling グループを作成する (インスタンスライフサイクルポリシーのデフォルトは終了)

1. Auto Scaling グループの詳細ページに移動し、**インスタンス管理**タブを選択します。

1. **ライフサイクルフックのインスタンスライフサイクルポリシーで**、**保持**を選択します。

1. 以下を使用して終了ライフサイクルフックを作成します。
   + ライフサイクル移行を**インスタンス終了**に設定
   + デフォルトの結果を **Abandon **に設定する

------
#### [ AWS CLI ]

**インスタンスの保持を設定するには**  
 インスタンスライフサイクルポリシーで [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) コマンドを使用します。

```
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-template LaunchTemplateName=my-template,Version='$Latest' \
--min-size 1 \
--max-size 3 \
--desired-capacity 2 \
--vpc-zone-identifier subnet-12345678 \
--instance-lifecycle-policy file://lifecycle-policy.json
```

Lifecycle-policy.json の内容:

```
{
    "RetentionTriggers": {
        "TerminateHookAbandon": "retain"
    }
}
```

**終了ライフサイクルフックを追加するには**  
[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-termination-hook \
--auto-scaling-group-name my-asg \
--lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \
--default-result ABANDON \
--heartbeat-timeout 300
```

------

# 保持されたインスタンスを管理する
<a name="manage-retained-instances"></a>

 保持状態に移行した Amazon EC2 インスタンスを監視および制御します。CloudWatch メトリクスを使用して保持されたインスタンスを追跡し、カスタムアクションの完了後に保持されたインスタンスを手動で終了します。

 保持されたインスタンスは、Amazon EC2 Auto Scaling グループの希望する容量にはカウントされません。インスタンスが保持状態になると、Auto Scaling は必要な容量を維持するために代替インスタンスを起動します。たとえば、Auto Scaling グループの希望する容量が 10 であるとします。インスタンスが `Terminating:Retained`状態になると、Auto Scaling は必要な容量を 10 に維持するために代替インスタンスを起動します。これで、アクティブなグループに 10 個のインスタンスと 1 個の保持されたインスタンスの合計 11 個のインスタンスが実行されました。保持されたインスタンスを手動で終了するまで、11 個のインスタンスすべてに対する標準の Amazon EC2 料金が適用されます。

## 保持されたインスタンスのインスタンスライフサイクル状態
<a name="instance-lifecyle-states-of-retained-instances"></a>

 インスタンスライフサイクルポリシーが使用される場合に、インスタンスがライフサイクル状態に移行する方法を理解します。インスタンスは、通常の終了から保持、最終終了までの特定のパスに従います。

*保持がトリガーされると、インスタンスは次の状態に移行します。*

1. `Terminating` - 通常の終了が開始されます

1. `Terminating:Wait` - ライフサイクルフックの実行

1. `Terminating:Proceed` - ライフサイクルアクションをまとめる (成功したか失敗したか)

1. `Terminating:Retained` - フックが失敗し、手動介入のためにインスタンスが保持される

ウォームプールインスタンスは、シナリオに応じて異なるライフサイクル状態パスを取ります。

*ウォームプールにスケールバックするインスタンス:*

1. `Warmed:Pending` - 通常のウォームプールの移行が開始されます

1. `Warmed:Pending:Wait` - ライフサイクルフックの実行

1. `Warmed:Pending:Proceed` - ライフサイクルアクションをまとめる (成功したか失敗したか)

1. `Warmed:Pending:Retained` - フックが失敗し、インスタンスが手動介入のために保持される

*ウォームプールから終了されるインスタンス:*

1. `Warmed:Terminating` - 通常の終了が開始されます

1. `Warmed:Terminating:Wait` - ライフサイクルフックの実行

1. `Warmed:Terminating:Proceed` - ライフサイクルアクションをまとめる (成功したか失敗したか)

1. `Warmed:Terminating:Retained` - フックが失敗し、インスタンスが手動介入のために保持される

## 保持されたインスタンスをモニタリングする
<a name="monitor-retained-instances"></a>

 保持された Amazon EC2 インスタンスにはコストがかかり、手動による介入が必要なため、モニタリングが不可欠です。Amazon EC2 Auto Scaling には、保持されているインスタンスを追跡するための CloudWatch メトリクスがいくつか用意されています。

グループメトリクスを有効にして、保持されたインスタンスを追跡します。

```
aws autoscaling enable-metrics-collection \
--auto-scaling-group-name my-asg \
--metrics GroupTerminatingRetainedInstances
```

使用可能なメトリクスは次のとおりです。
+  `GroupTerminatingRetainedInstances` は、 `Terminating:Retained`状態のインスタンスの数を示します。
+  `GroupTerminatingRetainedCapacity` は、 `Terminating:Retained`状態のインスタンスによって表されるキャパシティーユニットを示します。
+  `WarmPoolTerminatingRetainedCapacity` は、ウォームプールから終了する保持されたインスタンスを追跡します。
+  `WarmPoolPendingRetainedCapacity` は、ウォームプールに戻る保持されたインスタンスを追跡します。

 Amazon EC2 Auto Scaling グループのスケーリングアクティビティを確認して、インスタンスが保持された理由を把握することもできます。ライフサイクルフックの失敗を示す `StatusCode: Cancelled`およびステータスの理由メッセージを含む終了アクティビティを探します。

```
aws autoscaling describe-scaling-activities \
--auto-scaling-group-name my-asg
```

 これらのメトリクスに CloudWatch アラームを作成して、インスタンスが保持状態になったときにアラートを受け取ることをお勧めします。これにより、コストへの影響を追跡し、手動による介入が必要なインスタンスのクリーンアップを忘れないようにできます。

## 保持されたインスタンスを終了する
<a name="terminate-retained-instances"></a>

カスタムアクションが完了したら、[TerminateInstanceInAutoScalingGroup API ](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html)を呼び出して、保持されているインスタンスを終了します。

```
aws autoscaling terminate-instance-in-auto-scaling-group \
--instance-id i-1234567890abcdef0 \
--no-should-decrement-desired-capacity
```