

# Amazon EC2 インスタンスを停止させることなく、そのルートボリュームを置換する
<a name="replace-root"></a>

Amazon EC2 では、実行中のインスタンスのルート EBS ボリュームを置き換えることができます。
+ インスタンスストアボリュームで復元されたデータ ― インスタンスストアボリュームは、ルートボリュームが復元された後も、インスタンスにアタッチされたままになります。
+ データ (非ルート) Amazon EBS ボリュームに保存されたデータ - 非ルート Amazon EBS ボリュームは、ルートボリュームが復元された後もインスタンスに接続されたままです。
+ ネットワーク設定 — すべてのネットワークインターフェイスはインスタンスにアタッチされたままとなり、IP アドレス、識別子、およびアタッチメント ID を保持します。インスタンスが利用可能になると、保留中のネットワークトラフィックがすべてフラッシュされます。さらに、インスタンスは同じ物理ホスト上に残るため、パブリック IP アドレス、プライベート IP アドレス、および DNS 名が保持されます。
+ IAM ポリシー — インスタンスに関連付けられた IAM プロファイルとポリシー (タグベースのポリシーなど) は保持され、適用されます。

**Topics**
+ [

## ルートボリューム置換タスクの仕組み
](#replace-root-how)
+ [

## 考慮事項
](#replace-root-considerations)
+ [

## ルートボリュームを置き換える
](#replace)

## ルートボリューム置換タスクの仕組み
<a name="replace-root-how"></a>

インスタンスのルートボリュームを復元すると、*ルートボリュームの置換タスク*が作成されます。元のルートボリュームがインスタンスからデタッチされ、その代わりに新しいルートボリュームがインスタンスにアタッチされます。インスタンスのブロックデバイスマッピングは、置換用ルートボリュームの ID を反映するように更新されます。

インスタンスのルートボリュームを置き換える場合は、新しいボリュームのスナップショットのソースを指定する必要があります。可能なオプションは次のとおりです。

### ルートボリュームを元の状態に復元する
<a name="replace-launchstate"></a>

このオプションは、現在のルートボリュームを、その作成に使用されたスナップショットに基づくボリュームに置き換えます。

**起動状態の使用に関する考慮事項**  
置換用ルートボリュームには、元のルートボリュームと同じタイプ、サイズ、終了時の削除属性が割り当てられます。

### スナップショットを使用してボリュームを置き換える
<a name="replace-snapshot"></a>

このオプションは、現在のルートボリュームを、指定したスナップショットに基づく置換ボリュームに置き換えます。このルートボリュームから以前に作成した特定のスナップショットはその一例です。これは、ルートボリュームの破損やゲストオペレーティングシステムのネットワーク設定エラーによって発生した問題から復旧する必要がある場合に役立ちます。

置換用ルートボリュームには、元のルートボリュームと同じタイプ、サイズ、終了時の削除属性が割り当てられます。

**スナップショット使用時の考慮事項**
+ 使用できるのは、インスタンスの現在または以前のルートボリュームから直接作成されたスナップショットのみです。
+ ルートボリュームから作成したスナップショットにより作成されたスナップショットのコピーは使用できません。
+ ルートボリュームの置き換えに成功した後も、元のルートボリュームから取得したスナップショットを使用して、新しい (置換) ルートボリュームに置き換えることができます。

### AMI を使用したボリュームを置き換える
<a name="replace-ami"></a>

このオプションは、指定した AMI を使用して現在のルートボリュームを置き換えます。これは、オペレーティングシステム、およびアプリケーションのパッチ適用やアップグレードを実行する必要がある場合に役立ちます。AMI には、インスタンスと同じ製品コード、請求情報、アーキテクチャタイプ、仮想化タイプが必要です。

インスタンスで ENA または sriov-net が有効になっている場合は、これらの機能をサポートする AMI を使用する必要があります。インスタンスで ENA または sriov-net が有効になっていない場合は、それらの機能をサポートしていない AMI を選択できますが、ENA または sriov-net をサポートする AMI を選択すると、自動的にサポートを追加できます。

インスタンスで NitroTPM が有効になっている場合は、NitroTPM が有効になっている AMI を使用する必要があります。NitroTPM サポートは、選択した AMI に関係なく、インスタンスが NitroTPM サポート用に設定されていない場合は有効になりません。

インスタンスが AMI のブートモードをサポートしている場合は、インスタンスとは異なるブートモードの AMI を選択できます。インスタンスがブートモードをサポートしていない場合、リクエストは失敗します。インスタンスがブートモードをサポートしている場合、新しいブートモードがインスタンスに伝達され、それに応じてその UEFI データが更新されます。ブート順序を手動で変更したり、プライベートカーネルモジュールをロードするためにプライベート UEFI セキュアブートキーを追加したりした場合、ルートボリュームの置換時に変更内容が失われます。

置換用ルートボリュームには、元のルートボリュームと同じボリュームタイプ、削除時の削除属性が割り当てられ、AMI ルートボリュームのブロックデバイスマッピングのサイズを取得します。

**注記**  
AMI ルートボリュームのブロックデバイスマッピングのサイズは、元のルートボリュームのサイズ以上である必要があります。AMI ルートボリュームのブロックデバイスマッピングのサイズが元のルートボリュームのサイズよりも小さい場合、リクエストは失敗します。

ルートボリュームの置換タスクの完了後、コンソール、AWS CLI または AWS SDK を使用してインスタンスを記述すると、次の新しい情報および更新された情報が反映されます。
+ 新しい AMI ID
+ ルートボリュームの新しいボリューム ID
+ 更新されたブートモード設定 (AMI によって変更された場合)
+ 更新された NitroTPM 設定 (AMI によって有効になっている場合)
+ 更新された ENA 設定 (AMI によって有効になっている場合)
+ 更新された sriov-net 設定 (AMI によって有効になっている場合)

新しい AMI ID はインスタンスメタデータにも反映されます。

**AMI を使用ためのする考慮事項**
+ ブロックデバイスマッピングが複数ある AMI を使用する場合、AMI のルートボリュームのみが使用されます。他の (非ルート) ボリュームは無視されます。
+ この機能を使用できるのは、AMI とそれに関連するルートボリュームスナップショットに対するアクセス許可を持っている場合のみです。この機能は AWS Marketplace AMI では使用できません。
+ インスタンスに製品コードがない場合にのみ、製品コードなしの AMI を使用できます。
+ AMI ルートボリュームのブロックデバイスマッピングのサイズは、元のルートボリュームのサイズ以上である必要があります。AMI ルートボリュームのブロックデバイスマッピングのサイズが元のルートボリュームのサイズよりも小さい場合、リクエストは失敗します。
+ インスタンスのインスタンス ID ドキュメントは自動的に更新されます。
+ インスタンスが NitroTPM に対応している場合、インスタンスの NitroTPM データがリセットされ、新しいキーが生成されます。

ルートボリュームの置換プロセスが完了した後も、元のルートボリュームを維持するかどうかを選択できます。置換プロセスの完了後に元のルートボリュームを削除すると、元のルートボリュームは自動的に削除され、回復できなくなります。処理が完了した後も元のルートボリュームを維持することを選択した場合、ボリュームはアカウントにプロビジョニングされたままになるため、不要になったらそのボリュームを手動で削除する必要があります。

ルートボリュームの置き換えタスクは、次の状態に移行します:
+ `pending` — 置換ボリュームが作成されています。
+ `in-progress` — 元のボリュームがデタッチされ、置換ボリュームがアタッチされています。
+ `succeeded` — 置換ボリュームはインスタンスに正常にアタッチされ、インスタンスは利用可能です。
+ `failing` — 置換タスクが失敗を処理しています。
+ `failed` — 置換タスクは失敗しましたが、ルートボリュームはまだアタッチされています。
+ `failing-detached` — 置換タスクが正常に処理されていません。インスタンスにルートボリュームがアタッチされていない可能性があります。
+ `failed-detached` — 置換タスクが失敗し、インスタンスにルートボリュームがアタッチされていません。

ルートボリュームの置き換えタスクが失敗した場合、インスタンスは再起動され、元のルートボリュームはインスタンスにアタッチされたままになります。

## 考慮事項
<a name="replace-root-considerations"></a>

開始する前に、以下を考慮してください。

**要件**
+ インスタンスは `running` の状態である必要があります。
+ インスタンスは、プロセス中に自動的に再起動されます。メモリ (RAM) の内容は、再起動中に消去されます。手動で再起動する必要はありません。
+ インスタンスストアボリュームの場合、ルートボリュームを置き換えることはできません。Amazon EBS ルートボリュームを持つインスタンスのみに対応しています。
+ ルートボリュームを置き換えることができるのは、すべての仮想化インスタンスタイプと EC2 Mac ベアメタルインスタンスのみです。他のいかなるベアメタルインスタンスタイプもサポートされていません。
+ 使用できるのは、インスタンスの現在または以前のルートボリュームから直接作成されたスナップショットのみです。
+ 現在のリージョンで、アカウントのAmazon EBS の暗号化がデフォルトで有効になっていると、指定したスナップショットや指定した AMI のルートボリュームにおける暗号化ステータスに関係なく、ルートボリューム置換タスクによって作成された置換用ルートボリュームは常に暗号化されます。

**暗号化の結果**  
次の表は、考えられる暗号化の結果をまとめたものです。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/replace-root.html)

## ルートボリュームを置き換える
<a name="replace"></a>

インスタンスのルートボリュームを復元すると、*ルートボリュームの置換タスク*が作成されます。ルートボリュームの置換タスクを使用して、置換プロセスの進行状況と結果をモニタリングできます。

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

**ルートボリュームを置き換えるには**

1. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

1. ナビゲーションペインで、[**インスタンス**] を選択します。

1. ルートボリュームを置き換えるインスタンスを選択し、[**Actions**] (アクション)、[**Monitor and troubleshoot**] (監視とトラブルシューティング)、[**Replace root volume**] (ルートボリュームを置換) の順に選択します。
**注記**  
選択したインスタンスが `running` 状態でない場合、[ルートボリュームを置き換える] アクションは無効です。

1. **[復元]** には、以下のいずれかのオプションを選択します。
   + **[起動状態]** - 現在のルートボリュームの作成に使用されたスナップショットから置換ルートボリュームを復元します。
   + **[スナップショット]** - 置換ルートボリュームを、指定したスナップショットに復元します。**[スナップショット]** で、使用するスナップショットを選択します。
   + **[イメージ]** – 指定した AMI を使用して、置換ルートボリュームを復元します。**[イメージ]** で、使用する AMI を選択します。

1. (オプション) **[ボリューム初期化レート]** には、ボリューム初期化のための Amazon EBS プロビジョンドレート (ボリューム初期化レート) を MiB/秒で指定でき、スナップショットブロックはこのレートで Amazon S3 からボリュームにダウンロードされます。詳細については、「[ボリュームの初期化に Amazon EBS プロビジョンドレートを使用する](https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html#volume-initialization-rate)」を参照してください。デフォルトの初期化レート、または高速スナップショット復元 (選択したスナップショットで有効化されている場合) を使用する場合は、レートを指定しないでください。

1. (オプション) 置き換えようとしているルートボリュームを削除するには、**[置き換えられるルートボリュームを削除]** を選択します。

1. **[置換タスクを作成]** を選択します。

1. 置換タスクをモニタリングするには、インスタンスの **[ストレージ]** タブを選択し、**[最近のルートボリューム置換タスク]** を展開します。

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

**置換用ルートボリュームを起動状態に復元するには**  
[ create-replace-root-volume-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-replace-root-volume-task.html) コマンドを使用します。`--instance-id` には、ルートボリュームを置き換えるインスタンスの ID を指定します。`--snapshot-id` および `--image-id` のパラメータは省略します。置換後に元のルートボリュームを削除するには、`--delete-replaced-root-volume` を含めて、`true` を指定してください。スナップショットブロックが Amazon S3 からボリュームにダウンロードされるボリューム初期化レートを指定するには、`100` から `300` MiB/秒 までの値を `--volume-initialization-rate` に指定します。

```
aws ec2 create-replace-root-volume-task \
--instance-id i-1234567890abcdef0 \
--delete-replaced-root-volume \ 
--volume-initialization-rate 150
```

**置換用ルートボリュームを特定のスナップショットに復元するには**  
[create-replace-root-volume-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-replace-root-volume-task.html) コマンドを使用します。`--instance-id` には、ルートボリュームを置き換えるインスタンスの ID を指定します。`--snapshot-id` には、使用するスナップショットの ID を指定します。置換後に元のルートボリュームを削除するには、`--delete-replaced-root-volume` を含めて、`true` を指定してください。スナップショットブロックが Amazon S3 からボリュームにダウンロードされるボリューム初期化レートを指定するには、`100` から `300` MiB/秒 までの値を `--volume-initialization-rate` に指定します。

```
aws ec2 create-replace-root-volume-task \
--instance-id i-1234567890abcdef0 \
--snapshot-id snap-9876543210abcdef0 \
--delete-replaced-root-volume \ 
--volume-initialization-rate 150
```

**AMI を使用して置換用ルートボリュームを復元するには**  
[ create-replace-root-volume-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-replace-root-volume-task.html) コマンドを使用します。`--instance-id` には、ルートボリュームを置き換えるインスタンスの ID を指定します。`--image-id` に使用する AMI の ID を指定します。置換後に元のルートボリュームを削除するには、`--delete-replaced-root-volume` を含めて、`true` を指定してください。スナップショットブロックが Amazon S3 からボリュームにダウンロードされるボリューム初期化レートを指定するには、`100` から `300` MiB/秒 までの値を `--volume-initialization-rate` に指定します。

```
aws ec2 create-replace-root-volume-task \
--instance-id i-1234567890abcdef0 \
--image-id ami-09876543210abcdef \
--delete-replaced-root-volume \ 
--volume-initialization-rate 150
```

**ルートボリューム置換タスクのステータスを表示するには**  
[describe-replace-root-volume-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-replace-root-volume-tasks.html) コマンドを使用して、表示するルートボリューム置換タスクの ID を指定します。

```
aws ec2 describe-replace-root-volume-tasks \
    --replace-root-volume-task-ids replacevol-1234567890abcdef0 \
    --query ReplaceRootVolumeTasks[].TaskState
```

以下は出力の例です。

```
[
    "succeeded"
]
```

または、`instance-id` フィルターを指定して、結果をインスタンス別にフィルタリングします。

```
$ aws ec2 describe-replace-root-volume-tasks \
    --filters Name=instance-id,Values=i-1234567890abcdef0
```

------
#### [ PowerShell ]

**置換用ルートボリュームを起動状態に復元するには**  
[New-EC2ReplaceRootVolumeTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2ReplaceRootVolumeTask.html) コマンドを使用します。`-InstanceId` には、ルートボリュームを置き換えるインスタンスの ID を指定します。`-SnapshotId` および `-ImageId` のパラメータは省略します。置換後に元のルートボリュームを削除するには、`-DeleteReplacedRootVolume` を含めて、`$true` を指定してください。スナップショットブロックが Amazon S3 からボリュームにダウンロードされるボリューム初期化レートを指定するには、`100` から `300` MiB/秒 までの値を `-VolumeInitializationRate` に指定します。

```
New-EC2ReplaceRootVolumeTask `
    -InstanceId i-1234567890abcdef0 `
    -VolumeInitializationRate 150 `
    -DeleteReplacedRootVolume $true
```

**置換用ルートボリュームを特定のスナップショットに復元するには**  
[New-EC2ReplaceRootVolumeTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2ReplaceRootVolumeTask.html) コマンドを使用します。`--InstanceId` には、ルートボリュームを置き換えるインスタンスの ID を指定します。`-SnapshotId` には、使用するスナップショットの ID を指定します。置換後に元のルートボリュームを削除するには、`-DeleteReplacedRootVolume` を含めて、`$true` を指定してください。スナップショットブロックが Amazon S3 からボリュームにダウンロードされるボリューム初期化レートを指定するには、`100` から `300` MiB/秒 までの値を `-VolumeInitializationRate` に指定します。

```
New-EC2ReplaceRootVolumeTask `
    -InstanceId i-1234567890abcdef0 `
    -SnapshotId snap-9876543210abcdef0 `
    -VolumeInitializationRate 150 `
    -DeleteReplacedRootVolume $true
```

**AMI を使用して置換用ルートボリュームを復元するには**  
[New-EC2ReplaceRootVolumeTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2ReplaceRootVolumeTask.html) コマンドを使用します。`-InstanceId` には、ルートボリュームを置き換えるインスタンスの ID を指定します。`-ImageId` に使用する AMI の ID を指定します。置換後に元のルートボリュームを削除するには、`-DeleteReplacedRootVolume` を含めて、`$true` を指定してください。スナップショットブロックが Amazon S3 からボリュームにダウンロードされるボリューム初期化レートを指定するには、`100` から `300` MiB/秒 までの値を `-VolumeInitializationRate` に指定します。

```
New-EC2ReplaceRootVolumeTask `
    -InstanceId i-1234567890abcdef0 `
    -ImageId ami-0abcdef1234567890 `
    -VolumeInitializationRate 150 `
    -DeleteReplacedRootVolume $true
```

**ルートボリューム置換タスクのステータスを表示するには**  
[Get-EC2ReplaceRootVolumeTask](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ReplaceRootVolumeTask.html) コマンドを使用して、表示するルートボリューム置換タスクの ID を指定します。

```
(Get-EC2ReplaceRootVolumeTask `
    -ReplaceRootVolumeTaskIds replacevol-1234567890abcdef0).TaskState.Value
```

以下は出力の例です。

```
Succeeded
```

または、`instance-id` フィルターを指定して、結果をインスタンス別にフィルタリングします。

```
PS C:\> Get-EC2ReplaceRootVolumeTask -Filters @{Name = 'instance-id'; Values = 'i-1234567890abcdef0'} | Format-Table 
```

------