インスタンスの更新中にルートボリュームを置き換える - Amazon EC2 Auto Scaling

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

インスタンスの更新中にルートボリュームを置き換える

仕組み

ルートボリュームの置き換えは、インスタンスの実行中にルート EBS ボリュームのみを置き換えることでインスタンスを更新します。これにより、新しいインスタンスを起動する必要がなくなり、潜在的な容量の制約を回避できます。このプロセスでは、以下を含む他のすべてのインスタンスリソースが保持されます。

  • ネットワークインターフェイスと IP アドレス

  • 非ルート EBS ボリューム

  • インスタンスストアボリュームとデータ

  • セキュリティグループと IAM ロール

ルートボリュームの置き換え中、アプリケーションは既存のインスタンスで引き続き実行されます。元のルートボリュームはデタッチされ、指定された AMI から新しいルートボリュームが作成され、同じインスタンスにアタッチされます。元のルートボリュームは、置き換えが成功すると自動的に削除されます。

ルートボリュームの置き換え戦略を使用すると、インスタンスは次のライフサイクル状態を通過します。

  1. ReplacingRootVolume - ルートボリュームの置換が開始されます

  2. ReplacingRootVolume:Wait - ライフサイクルフックの完了を待機します (設定されている場合)

  3. ReplacingRootVolume:Proceed - 置き換えを続行します

  4. RootVolumeReplaced - 置き換えが正常に完了しました

ルートボリュームの置換が完了すると、Auto Scaling は更新されたインスタンスに対してヘルスチェックを実行します。インスタンスのルートボリュームの置換が失敗した場合、Auto Scaling はそのインスタンスを終了としてマークし、新しいインスタンスに置き換えます。

要件

  • Auto Scaling グループは混合インスタンスポリシーを使用する必要があります

  • 混合インスタンスポリシーのすべてのオーバーライドでは、 を指定する必要があります。 ImageId

  • AMIs には 1 つのルートボリュームのみを含める必要があります

  • すべてのインスタンスは、グループの起動テンプレート設定と一致する必要があります

  • ImageId オーバーライドを含む混合インスタンスポリシーを使用して、必要な設定でインスタンスの更新を開始する必要があります。

ルートボリュームを置き換えてインスタンスの更新を開始する

ルートボリュームの置き換え (AWS CLI) を使用してインスタンスの更新を開始するには

次の start-instance-refresh コマンドを使用して、 からインスタンスの更新を開始します AWS CLI。JSON 設定ファイルでは、変更する任意の設定を指定できます。設定ファイルを参照するとき、次の例に示すように、ファイルパスおよび名前を指定します。

aws autoscaling start-instance-refresh --cli-input-json file://config.json

config.json の内容:

{ "AutoScalingGroupName": "my-asg", "Strategy" : "ReplaceRootVolume", "DesiredConfiguration":{ "MixedInstancesPolicy":{ "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateId":"my-launch-template", "Version": "1" }, "Overrides": [ { "InstanceType":"c5.large", "ImageId":"ami-1234example" }, { "InstanceType":"m5.large", "ImageId":"ami-2345example" } ] } } }, "Preferences": { "InstanceWarmup": 60, "MinHealthyPercentage": 90, "AutoRollback": true, "ScaleInProtectedInstances": Ignore, "StandbyInstances": Ignore } }

設定が指定されない場合、デフォルト値が使用されます。詳細については、「インスタンスの更新のデフォルト値について説明する」を参照してください。

出力例:

{ "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b" }

制限事項

  • EC2 Auto Scaling グループまたはインスタンスの更新に必要な設定が $Latestまたは $Default起動テンプレートバージョンを使用している場合、ルートボリュームの置換でインスタンスの更新を開始することはできません。

  • 混合インスタンスポリシーにインスタンスタイプが存在しないインスタンスが含まれている場合、Amazon EC2 Auto Scaling グループのルートボリュームの置換でインスタンスの更新を開始することはできません。

  • ルートボリュームの置き換えによるインスタンスの更新中、必要な設定の混合インスタンスポリシーに存在するタイプのインスタンスのみをアタッチできます。

  • ウォームプールがある EC2 Auto Scaling グループでは、ルートボリュームの置換を使用してインスタンスの更新を開始することはできません。

  • ルートボリュームの置き換えでアクティブなインスタンスの更新がある Amazon EC2 Auto Scaling グループにウォームプールを追加することはできません。

ルートボリュームを置き換えるライフサイクルフックを使用する

ルートボリューム置換中のインスタンスは、独自のライフサイクル移行に従い、置換の前後にアクション (Lambda 関数など) を呼び出すことができます。ルートボリューム置換中のライフサイクル状態の詳細については、「」を参照してくださいルートボリューム置換中のインスタンスのライフサイクル状態遷移

ライフサイクルフック追加の詳細については、Auto Scaling グループにライフサイクル フックを追加する を参照してください。ライフサイクルアクション完了の詳細については、Auto Scaling グループでライフサイクルアクションを完了する を参照してください。

ルートボリュームを置き換える前に、ライフサイクルフックは以下のシナリオで役立ちます。

  • ルートボリュームが置き換えられ、インスタンスが再起動される前に、アプリケーションを適切にシャットダウンする必要があります。

  • ボリュームが置き換えられる前に、ルートボリュームから別の場所にデータを移動したい。

ルートボリュームの交換後、ライフサイクルフックは以下のシナリオで役立ちます。

  • トラフィックの受信を開始する前に、インスタンスが新しい AMI で完全に準備されていることを確認する必要があります。

  • ルートボリュームに以前存在していたアプリケーションデータをブートストラップします。

ライフサイクルフックを追加するときは、次の点を考慮してください。

  • ライフサイクルアクションにautoscaling:EC2_INSTANCE_TERMINATINGライフサイクルフックが設定されている場合、ルートボリュームの置換が近いインスタンスは一時停止し、 ReplacingRootVolume:Wait状態になったときにカスタムアクションを実行します。

  • ライフサイクルフックがautoscaling:EC2_INSTANCE_LAUNCHINGライフサイクルアクション用に設定されている場合、ルートボリュームを置き換えたばかりのインスタンスは一時停止し、 Pending:Wait状態に達したときにカスタムアクションを実行します。

インスタンスが待機状態になると、Amazon EC2 Auto Scaling は通知を送信します。Auto Scaling ライフサイクルフック通知には、インスタンスがルートボリュームの交換中であるReplaceRootVolumeことを示す値を持つ Actionフィールドが含まれています。

これらの通知の例については、このガイドの EventBridge セクションを参照してください。詳細については、「ルートボリュームのライフサイクルイベントを置き換えるインスタンスの更新」を参照してください。