

# Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング
<a name="block-device-mapping-concepts"></a>

起動する各インスタンスにはAmazon EBS ボリューム、またはインスタンスストアボリュームのどちらかのルートボリュームが関連付けられています。ブロックデバイスマッピングを使用すると、インスタンスの起動時にそのインスタンスにアタッチする追加の EBS ボリュームまたはインスタンスストアボリュームを指定できます。追加する EBS ボリュームは実行中のインスタンスにアタッチすることもできます。ただし、インスタンスストアボリュームをインスタンスにアタッチする方法は、インスタンスの起動時にブロックデバイスマッピングを使用してボリュームをアタッチする以外方法はありません。

**Topics**
+ [ブロックデバイスマッピングの概念](#block-device-mapping-def)
+ [AMI へのブロックデバイスマッピングの追加](ami-block-device-mapping.md)
+ [Amazon EC2 インスタンスへのブロックデバイスマッピングの追加](instance-block-device-mapping.md)

## ブロックデバイスマッピングの概念
<a name="block-device-mapping-def"></a>

*ブロックデバイス*は一連のバイトまたはビット (ブロック) でデータを移動するストレージデバイスです。これらのデバイスはランダムアクセスをサポートし、バッファ付き I/O を使用します。例にはハードディスク、CD-ROM ドライブ、フラッシュドライブが含まれます。ブロックデバイスは物理的にコンピュータにアタッチできます。また、コンピュータに物理的にアタッチされているかのように、リモートでアクセスすることもできます。

Amazon EC2 は2 種類のブロックデバイスをサポートしています。
+ インスタンスストアボリューム (基盤となるハードウェアがインスタンスのホストコンピュータに物理的にアタッチされている仮想デバイス)
+ EBS ボリューム (リモートストレージデバイス)

*ブロックデバイスマッピング*ではインスタンスにアタッチするブロックデバイス (インスタンスストアボリュームと EBS ボリューム) を定義します。ブロックデバイスマッピングはAMI 作成プロセスの一環として、AMI から起動されるすべてのインスタンスによって使用されるように指定できます。また、インスタンスの起動時にブロックデバイスマッピングを指定することもできます。起動したインスタンスの AMI ですでに指定されているマッピングはこのマッピングによって上書きされます。インスタンスタイプによってサポートされるすべての NVMe インスタンスストアボリュームが自動的に列挙され、インスタンスの起動時にデバイス名が割り当てられることに注意してください。それらをブロックデバイスマッピングに含めます。含めないとインスタンスは効果がありません。

**Topics**
+ [ブロックデバイスマッピングのエントリ](#parts-of-a-block-device-mapping)
+ [ブロックデバイスマッピングのインスタンスストアの注意事項](#instance_store_caveats)
+ [ブロックデバイスマッピングの例](#block-device-mapping-ex)
+ [オペレーティングシステムでデバイスを使用できるようにする方法](#bdm-to-os)

### ブロックデバイスマッピングのエントリ
<a name="parts-of-a-block-device-mapping"></a>

ブロックデバイスマッピングを作成するとき、インスタンスにアタッチする必要があるブロックデバイスごとに以下の情報を指定します。
+ Amazon EC2 内で使用されるデバイス名。インスタンスのブロックデバイスドライバーはボリュームをマウントするときに実際のボリューム名を割り当てます。この割り当てられた名前はAmazon EC2 が推奨する名前とは異なる可能性があります。詳細については[Amazon EC2 インスタンス上のボリュームのデバイス名](device_naming.md)を参照してください。

インスタンスストアボリュームの場合は次の情報も指定します。
+ 仮想デバイスの名前: `ephemeral[0-23]`。インスタンスで使用できるインスタンスストアボリュームの数とサイズはインスタンスタイプによって異なります。

NVMe インスタンスストアボリュームの場合は次の情報も適用されます。
+ これらのボリュームが自動的に列挙され、デバイス名が割り当てられます。それらをブロックデバイスマッピングに含めます。含めないとインスタンスは効果がありません。

EBS ボリュームの場合は次の情報も指定します。
+ ブロックデバイスを作成するときに使用するスナップショットの ID (snap-*xxxxxxxx*)。ボリュームサイズを指定する場合、この値はオプションです。アーカイブされたスナップショットの ID は指定できません。
+ ボリュームのサイズ (GiB 単位) 。指定されたサイズは指定されたスナップショットのサイズ以上である必要があります。
+ インスタンス終了時にボリュームを削除するかどうか (`true` または `false`) デフォルト値はルートボリュームでは `true`、アタッチされたボリュームでは `false` です。AMI を作成するときはそのブロックデバイスマッピングがインスタンスからこの設定を継承します。インスタンスを起動するときに、AMI からこの設定を継承します。
+ ボリュームタイプは汎用 SSD の場合は `gp2` および `gp3`、プロビジョンド IOPS SSD の場合は `io1` および `io2`、スループット最適化 HDD の場合は `st1`、Cold HDD の場合は `sc1`、磁気の場合は `standard` です。
+ ボリュームがサポートする 1 秒あたりの入力/出力オペレーションの数 (IOPS) (`io1` および `io2` ボリュームでのみ使用)
+ 一部のインスタンスタイプは、複数の EBS カードをサポートしています。EBS カードインデックスを指定することで、アタッチするボリュームの EBS カードを選択できます。詳細については、「[EBS カード](ebs_cards.md#ebs_cards.title)」を参照してください。

### ブロックデバイスマッピングのインスタンスストアの注意事項
<a name="instance_store_caveats"></a>

ブロックデバイスマッピングでインスタンスストアボリュームがある場合はインスタンスを AMI から起動すると、いくつかの警告が表示されます。
+ インスタンスタイプによって中に含まれるインスタンスストアボリューム数が異なり、インスタンスストアボリュームがまったく含まれないインスタンスタイプもあります。単一インスタンスストアボリュームのみをサポートするインスタンスタイプで、AMI が 2 つのインスタンスストアボリュームにマッピングされている場合、インスタンスは単一のインスタンスストアボリュームのみで起動します。
+ インスタンスストアボリュームをマッピングできるのは起動時のみに限られます。インスタンスストアボリュームのないインスタンスを停止することはできません (`t2.micro` など)。インスタンスストアボリュームをサポートするインスタンスに変更し、インスタンスストアボリュームを含めて再起動します。ただし、AMI をインスタンスから作成し、インスタンスストアボリュームをサポートするインスタンスタイプで起動して、インスタンスストアボリュームをインスタンスにマッピングすることは可能です。
+ インスタンスストアボリュームをマッピングしたインスタンスを起動し、インスタンスを停止して、インスタンスストアボリュームの少ないインスタンスタイプに変更して再開すれば、最初の起動からマッピングしたインスタンスストアボリュームもインスタンスのメタデータに表示されます。ただし、インスタンスに使用できるのはそのインスタンスタイプでサポートされているインスタンスストアボリュームの最大数までです。
**注記**  
インスタンスが停止されると、インスタンスストアボリュームのデータはすべて失われます。
+ 起動時のインスタンスストア容量によってはM3 インスタンスが AMI インスタンスストアブロックデバイスのマッピングを (起動時に指定されていない限り) 無視します。インスタンスの起動時にインスタンスストアボリュームを使用するには起動する AMI ボリュームに AMI でインスタンスストアボリュームがマッピングされていたとしても、起動時にインスタンスストアブロックデバイスのマッピングを指定する必要があります。

### ブロックデバイスマッピングの例
<a name="block-device-mapping-ex"></a>

この図は EBS-backed インスタンスのブロックデバイスマッピングの例を示しています。この例では`/dev/sdb` を `ephemeral0` にマッピングし、2 つの EBS ボリュームを 1 つは `/dev/sdh` に、もう 1 つは `/dev/sdj` にマッピングします。また、ルートボリュームである EBS ボリューム、`/dev/sda1` も示しています。

![\[インスタンス、インスタンスストアボリューム、および EBS ボリュームの間の関係。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/block_device_mapping_figure.png)


このブロックデバイスマッピングの例はこのトピックのコマンドおよび API の例で使用されています。ブロックデバイスマッピングを作成するコマンドおよび API の例については[AMI 用のブロックデバイスマッピングの指定](ami-block-device-mapping.md#create-ami-bdm)および[インスタンス起動時のブロックデバイスマッピングの更新](instance-block-device-mapping.md#Using_OverridingAMIBDM)を参照してください。

### オペレーティングシステムでデバイスを使用できるようにする方法
<a name="bdm-to-os"></a>

Amazon EC2 ではブロックデバイスの記述に、`/dev/sdh` や `xvdh` などのデバイス名が使われます。また、Amazon EC2 ではEC2 インスタンスにアタッチするブロックデバイスを、ブロックデバイスマッピングで指定します。ストレージデバイスにアクセスするにはインスタンスにアタッチしたブロックデバイスが、オペレーティングシステムによって事前にマウントされていなければなりません。ブロックデバイスがインスタンスからデタッチされると、そのデバイスはオペレーティングシステムによってアンマウントされ、ストレージデバイスにアクセスできなくなります。

**Linux インスタンス** – ブロックデバイスマッピングで指定されたデバイス名はインスタンスの初回起動時に対応するブロックデバイスにマッピングされます。デフォルトでフォーマットおよびマウントされるインスタンスストアボリュームはインスタンスタイプによって決まります。インスタンスタイプで使用できるインスタンスストアボリューム数を超えていない場合は起動時に追加のインスタンスストアボリュームをマウントできます。詳細については[EC2 インスタンス用のインスタンスストアの一時ブロックストレージ](InstanceStorage.md)を参照してください。ボリュームがフォーマットおよびマウントされるときに使用されるデバイスはインスタンスのブロックデバイスドライバーによって決まります。

**Windows インスタンス** – ブロックデバイスマッピングで指定されたデバイス名はインスタンスの初回起動時に対応するブロックデバイスにマッピングされ、Ec2Config サービスによってドライブが初期化されマウントされます。ルートボリュームは `C:\` としてマウントされます。インスタンスストアボリュームは`Z:\`、`Y:\` などとしてマウントされます。EBS ボリュームについては使用可能な任意のドライブ文字を使用してマウントできます。ただし、ドライブ文字を EBS ボリュームに割り当てる方法を設定することができます。詳細については「[Amazon EC2 Windows インスタンス上の Windows 起動エージェント](configure-launch-agents.md)」を参照してください。

# AMI へのブロックデバイスマッピングの追加
<a name="ami-block-device-mapping"></a>

各 AMI にブロックデバイスマッピングがあります。このブロックデバイスマッピングはAMI からのインスタンスの起動時にそのインスタンスにアタッチするブロックデバイスを指定します。追加のブロックデバイスを AMI に追加するには独自の AMI を作成する必要があります。

**Topics**
+ [AMI 用のブロックデバイスマッピングの指定](#create-ami-bdm)
+ [AMI ブロックデバイスマッピングの EBS ボリュームの表示](#view-ami-bdm)

## AMI 用のブロックデバイスマッピングの指定
<a name="create-ami-bdm"></a>

AMI を作成する場合に、ルートボリュームに加えて、ボリュームを指定するには2 つの方法があります。インスタンスから AMI を作成する前に、実行中のインスタンスにすでにボリュームをアタッチしている場合、AMI のブロックデバイスマッピングにそれらの同じボリュームが含まれます。EBS ボリュームの場合、既存のデータが新しいスナップショットに保存され、それがブロックデバイスマッピングで指定される新しいスナップショットになります。インスタンスストアボリュームの場合、データは維持されません。

EBS-backed AMI の場合、ブロックデバイスマッピングを使用して、EBS ボリュームとインスタンスストアボリュームを追加できます。Amazon S3-backed AMI の場合、イメージの登録時にイメージマニフェストファイルでブロックデバイスマッピングエントリを変更して、インスタンスストアボリュームのみを追加できます。

**注記**  
M3 インスタンスの場合、インスタンスのブロックデバイスマッピングで起動時にインスタンスストアボリュームを指定する必要があります。AMI のブロックデバイスマッピングで指定したインスタンスストアボリュームはインスタンスブロックデバイスマッピングの一部として指定されていない場合、M3 インスタンスを起動した際に無視される可能性があります。

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

**AMI にボリュームを追加するには**

1. Amazon EC2 コンソールを開きます。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. インスタンスを選択し、[**アクション**]、[**イメージとテンプレート**]、[**イメージの作成**] の順に選択してください。

1. イメージの名前と説明を入力してください。

1. インスタンスボリュームが [**インスタンスボリューム**] の下に表示されます。別のボリュームを追加するには[**ボリュームの追加**] を選択してください。

1. [**Volume type**] で、ボリュームタイプを選択してください。[**Device**] で、デバイス名を選択してください。EBS ボリュームではスナップショット、ボリュームサイズ、ボリュームタイプ、IOPS、暗号化状態などの追加の詳細を指定できます。

1. [**イメージを作成**] を選択してください。

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

**AMI にボリュームを追加するには**

EBS-Backed AMI のブロックデバイスマッピングを指定するには [create-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html) マンドを使用します。Amazon S3-backed AMI のブロックデバイスマッピングを指定するには [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドを使用します。

`--block-device-mappings` パラメータを使用してブロックデバイスマッピングを指定します。次に示すように、JSON でエンコードされた引数をコマンドラインで直接指定することも、JSON ファイルを参照して指定することもできます。

```
--block-device-mappings file://mapping.json
```

インスタンスストアボリュームを追加するには次のマッピングを使用します。NVMe インスタンスストアボリュームは自動的に追加されることに注意してください。

```
{
    "DeviceName": "device_name",
    "VirtualName": "ephemeral0"
}
```

空の 100 GiB ボリュームを追加するには次のマッピングを使用します。

```
{
    "DeviceName": "device_name",
    "Ebs": {
      "VolumeSize": 100
    }
}
```

スナップショットに基づいた EBS ボリュームを追加するには次のマッピングを使用します。

```
{
    "DeviceName": "device_name",
    "Ebs": {
      "SnapshotId": "snap-1234567890abcdef0"
    }
}
```

デバイスのマッピングを省略するには次のマッピングを使用します。

```
{
    "DeviceName": "device_name",
    "NoDevice": ""
}
```

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

[New-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Image.html) コマンドレットを使用して、EBS-Backed AMI のブロックデバイスマッピングを指定します。[Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) コマンドレットを使用して、Amazon S3-backed AMI のブロック デバイスマッピングを指定します。

`-BlockDeviceMapping` オプションを追加し、 `bdm` で更新を指定します。

```
-BlockDeviceMapping $bdm
```

次のマッピングは、スナップショットに基づいてボリュームを追加します。

```
$ebd = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebd.SnapshotId = "snap-1234567890abcdef0"
$bdm = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$bdm.DeviceName = "device_name"
$bdm.Ebs = $ebd
```

次のマッピングは、空の 100 GB ボリュームを追加します。

```
$ebd = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebd.VolumeSize = 100
$bdm = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$bdm.DeviceName = "device_name"
$bdm.Ebs = $ebd
```

------

## AMI ブロックデバイスマッピングの EBS ボリュームの表示
<a name="view-ami-bdm"></a>

AMI のブロックデバイスマッピングの EBS ボリュームを簡単に列挙できます。

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

**AMI の EBS ボリュームを表示するには**

1. Amazon EC2 コンソールを開きます。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. [**Filter**] リストから [**EBS images**] を選択して、EBS-Backed AMI のリストを取得します。

1. ご希望の AMI を選択し、[**Details**] タブを確認します。少なくとも、ルートボリューム (**ルートデバイス**という用語が**ルートボリューム**と同等である場合) には、次の情報を使用できます。
   + **ルートデバイスタイプ** (`ebs`)
   + [**ルートデバイス名**] (例: `/dev/sda1`)
   + [**Block Devices**] (例: `/dev/sda1=snap-1234567890abcdef0:8:true`)

   AMI がブロックデバイスマッピングを使用して追加の EBS ボリュームで作成された場合、[**Block Devices**] フィールドにはその追加の EBS ボリュームのマッピングも表示されます。(この画面にはインスタンスストアボリュームは表示されません。)

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

**AMI の EBS ボリュームを表示するには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Image[0].BlockDeviceMappings
```

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

**AMI の EBS ボリュームを表示するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).BlockDeviceMappings
```

------

# Amazon EC2 インスタンスへのブロックデバイスマッピングの追加
<a name="instance-block-device-mapping"></a>

デフォルトでは起動するインスタンスにはそのインスタンスを起動した AMI のブロックデバイスマッピングで指定されたストレージデバイスが含まれます。インスタンスを起動するときに、インスタンスのブロックデバイスマッピングへの変更を指定できます。この変更は AMI のブロックデバイスマッピングを上書きするか、このブロックデバイスマッピングに統合されます。

**制限事項**
+ ルートボリュームの場合、変更できるのはボリュームサイズ、ボリュームタイプ、および [**合わせて削除**] フラグのみです。
+ EBS ボリュームを変更する場合、そのサイズを小さくすることはできません。そのため、指定するスナップショットのサイズはAMI のブロックデバイスマッピングで指定されたスナップショットのサイズ以上であることが必要です。

**Topics**
+ [インスタンス起動時のブロックデバイスマッピングの更新](#Using_OverridingAMIBDM)
+ [実行中のインスタンスのブロックデバイスマッピングの更新](#update-instance-bdm)
+ [インスタンスブロックデバイスマッピングの EBS ボリュームの表示](#view-instance-bdm)
+ [インスタンスストアボリュームのインスタンスブロックデバイスマッピングの表示](#bdm-instance-metadata)

## インスタンス起動時のブロックデバイスマッピングの更新
<a name="Using_OverridingAMIBDM"></a>

インスタンスの起動時に、EBS ボリュームとインスタンスストアボリュームをインスタンスに追加できます。インスタンスのブロックデバイスマッピングを更新しても、そのインスタンスが起動された AMI のブロックデバイスマッピングは完全には変更されないことに注意してください。

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

**起動時にインスタンスのボリュームを更新するには**

1. 手順に沿って[インスタンスを起動](ec2-launch-instance-wizard.md)しますが、次のステップが完了しボリュームが更新されるまで、インスタンスを起動しないでください。

1. (オプション) ボリュームを追加するには、**[ストレージを設定]**、**[新しいボリュームの追加]** を選択します。ボリュームサイズとボリュームタイプを選択します。

1. (オプション) AMI のブロックデバイスマッピングで指定されたボリュームを抑制するには、**[ストレージを設定]**、**[削除]** を選択します。

1. (オプション) EBS ボリュームの設定を変更するには、**[ストレージを設定]** ペインで **[アドバンスト]** を選択します。ボリュームの情報を展開し、必要な変更を加えます。

1. **[Summary]** (概要) パネルでインスタンスの設定を確認し、**[Launch instance]** (インスタンスを起動) を選択してください。詳細については、「[コンソールのインスタンス起動ウィザードを使用して EC2 インスタンスを起動する](ec2-launch-instance-wizard.md)」を参照してください。

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

**起動時にインスタンスのボリュームを更新するには**  
`--block-device-mappings` オプションで [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) コマンドを使用します。

```
--block-device-mappings file://mapping.json
```

例えば、AMI ブロックデバイスマッピングが以下のように指定しているとします。
+ `/dev/xvda` - EBS ルートボリューム
+ `/dev/sdh` - `snap-1234567890abcdef0` から作成された EBS ボリューム
+ `/dev/sdj` - サイズが `100` の空の EBS ボリューム
+ `/dev/sdb` - インスタンスストアボリューム `ephemeral0`

こちらが、`mapping.json` にあるインスタンスのブロックデバイスマッピングだとします。

```
[
    {
        "DeviceName": "/dev/xvda",
        "Ebs": {
            "VolumeSize": 100
        }
    },
    {
        "DeviceName": "/dev/sdj",
        "NoDevice": ""
    },
    {
        "DeviceName": "/dev/sdh",
        "Ebs": {
            "VolumeSize": 300
        }
    },
    {
        "DeviceName": "/dev/sdc",
        "VirtualName": "ephemeral1"
    }
]
```

このインスタンスブロックデバイスマッピングは、次の操作を行います。
+ ルートボリューム `/dev/xvda` のサイズを上書きして 100 GiB まで増やす。
+ `/dev/sdj` がインスタンスにアタッチされることを防ぐ。
+ `/dev/sdh` のサイズを上書きし、300 GiB に増やす。スナップショットの ID は、再度指定する必要はありません。
+ エフェメラルボリューム、`/dev/sdc` を追加する。インスタンスタイプが複数のインスタンスストアボリュームをサポートしていない場合、これには効果がありません。インスタンスタイプが NVMe インスタンスストアボリュームをサポートしている場合、それらは自動で列挙され、インスタンスブロックデバイスマッピングに追加されて、上書きできなくなります。

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

**起動時にインスタンスのボリュームを更新するには**  
`-BlockDeviceMapping` パラメータと、[New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) コマンドレットと `-BlockDeviceMapping` パラメータを使用します。

```
-BlockDeviceMapping $bdm
```

こちらが、`$bdm` にあるインスタンスのブロックデバイスマッピングだとします。

```
$bdm = @()

$root = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$root.DeviceName = "/dev/xvda"
$ebs1 = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebs1.VolumeSize = 100
$root.Ebs = $ebs1
$bdm += $root

$sdj = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdj.DeviceName = "/dev/sdj"
$sdj.NoDevice = ""
$bdm += $sdj

$sdh = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdh.DeviceName = "/dev/sdh"
$ebs2 = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebs2.VolumeSize = 300
$sdh.Ebs = $ebs2
$bdm += $sdh

$sdc = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdc.DeviceName = "/dev/sdc"
$sdc.VirtualName = "ephemeral1"
$bdm += $sdc
```

このインスタンスブロックデバイスマッピングは、次の操作を行います。
+ ルートボリューム `/dev/xvda` のサイズを上書きして 100 GiB まで増やす。
+ `/dev/sdj` がインスタンスにアタッチされることを防ぐ。
+ `/dev/sdh` のサイズを上書きし、300 GiB に増やす。スナップショットの ID は、再度指定する必要はありません。
+ エフェメラルボリューム、`/dev/sdc` を追加する。インスタンスタイプが複数のインスタンスストアボリュームをサポートしていない場合、これには効果がありません。インスタンスタイプが NVMe インスタンスストアボリュームをサポートしている場合、それらは自動で列挙され、インスタンスブロックデバイスマッピングに追加されて、上書きできなくなります。

------

## 実行中のインスタンスのブロックデバイスマッピングの更新
<a name="update-instance-bdm"></a>

この属性を変更する前に、インスタンスを停止する必要はありません。

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

**実行中のインスタンスのブロックデバイスマッピングを更新するには**  
[modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) コマンドを使用します。

`--block-device-mappings` オプションを追加します。

```
--block-device-mappings file://mapping.json
```

`mapping.json` で、更新を指定します。例えば、次の更新では、ルートボリュームが存続するように変更されます。

```
[
  {
    "DeviceName": "/dev/sda1",
    "Ebs": {
      "DeleteOnTermination": false
    }
  }
]
```

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

**実行中のインスタンスのブロックデバイスマッピングを更新するには**  
[Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) コマンドレットを使用します。

`-BlockDeviceMapping` オプションを追加します。

```
-BlockDeviceMapping $bdm
```

`bdm` で、更新を指定します。例えば、次の更新では、ルートボリュームが存続するように変更されます。

```
$ebd = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebd.DeleteOnTermination = false
$bdm = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$bdm.DeviceName = "/dev/sda1"
$bdm.Ebs = $ebd
```

------

## インスタンスブロックデバイスマッピングの EBS ボリュームの表示
<a name="view-instance-bdm"></a>

インスタンスにマッピングされた EBS ボリュームを簡単に列挙できます。

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

**インスタンスの EBS ボリュームを表示するには**

1. Amazon EC2 コンソールを開きます。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. インスタンスを選択し、**[ストレージ]** タブに表示された詳細を確認します。少なくとも、ルートボリューム (**ルートデバイス**という用語が**ルートボリューム**と同等である場合) には、次の情報を使用できます。
   + **ルートデバイスタイプ ** (例: **EBS**)
   + [**ルートデバイス名**] (例: `/dev/xvda`)
   + **[ブロックデバイス]** (例: `/dev/xvda`、`/dev/sdf`、`/dev/sdj`)

   インスタンスがブロックデバイスマッピングを使用して追加の EBS ボリュームで起動した場合は[**ブロックデバイス**] の下に表示されます。このタブにはインスタンスストアボリュームは表示されません。

1. EBS ボリュームに関する追加情報を表示するにはそのボリューム ID を選択して [ボリューム] ページに移動します。

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

**インスタンスの EBS ボリュームを表示するには**  
[describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) コマンドを使用します。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[*].Instances[0].BlockDeviceMappings
```

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

**インスタンスの EBS ボリュームを表示するには**  
[Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) コマンドレットを使用します。

```
(Get-EC2Instance -InstanceId i-0bac57d7472c89bac).Instances.BlockDeviceMappings
```

------

## インスタンスストアボリュームのインスタンスブロックデバイスマッピングの表示
<a name="bdm-instance-metadata"></a>

インスタンスタイプはインスタンスに利用できるインスタンスストアボリュームの数とタイプを決定します。ブロックデバイスマッピングのインスタンスストアボリュームの数が、インスタンスに利用できるインスタンスストアボリュームの数を超える場合は追加のボリュームは無視されます。インスタンスのインスタンスストアボリュームを表示するには**lsblk** コマンド (Linux インスタンス) を実行するか、**Windows ディスク管理** (Windows インスタンス を開いてください。各インスタンスタイプでサポートされるインスタンスストアボリュームの数については「[Amazon EC2 インスタンスタイプの仕様](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-type-specifications.html)」を参照してください。

インスタンスのブロックデバイスマッピングを表示した場合、EBS ボリュームのみが表示され、インスタンスストアボリュームは表示されません。インスタンスのインスタンスストアボリュームを表示する方法はボリュームタイプによって異なります。



### NVMe インスタンスストアボリューム
<a name="nvme-instance-store"></a>

#### Linux インスタンス
<a name="nvme-instance-store-linux"></a>

ブロックデバイスマッピング内の NVMe インスタンスストアボリュームをクエリするにはNVMe コマンドラインパッケージ ([nvme-cli](https://github.com/linux-nvme/nvme-cli)) を使用します。パッケージをダウンロードし、インスタンスにインストールした上で、次のコマンドを実行します。

```
[ec2-user ~]$ sudo nvme list
```

インスタンスに関する出力例を次に示します。Model 列のテキストはこのボリュームが EBS ボリュームであるか、インスタンスストアボリュームであるかを示します。この例では`/dev/nvme1n1` および `/dev/nvme2n1` がインスタンスストアボリュームです。

```
Node             SN                   Model                                    Namespace
---------------- -------------------- ---------------------------------------- ---------
/dev/nvme0n1     vol06afc3f8715b7a597 Amazon Elastic Block Store               1        
/dev/nvme1n1     AWS2C1436F5159EB6614 Amazon EC2 NVMe Instance Storage         1         
/dev/nvme2n1     AWSB1F4FF0C0A6C281EA Amazon EC2 NVMe Instance Storage         1         ...
```

#### Windows インスタンス
<a name="nvme-instance-store-windows"></a>

Disk Management または PowerShell を使用して、EBS とインスタンスストアの NVMe ボリュームの両方を一覧表示できます。詳細については「[Amazon EC2 Windows インスタンスの NVMe ディスクをボリュームにマッピングする](windows-list-disks-nvme.md)」を参照してください。

### HDD もしくは SSD のインスタンスストアボリューム
<a name="hdd-ssd-instance-store"></a>

ブロックデバイスマッピングで HDD もしくは SSD のインスタンスストアボリュームをクエリするにはインスタンスメタデータを使用します。NVMe インスタンスストアボリュームは含まれていません。

インスタンスメタデータのすべてのリクエストの基本 URI は `http://169.254.169.254/latest/` です。詳細については「[インスタンスメタデータを使用して EC2 インスタンスを管理する](ec2-instance-metadata.md)」を参照してください。

#### Linux インスタンス
<a name="hdd-ssd-instance-store-linux"></a>

まず、実行中にインスタンスに接続します。インスタンスからこのクエリを使用して、そのブロックデバイスマッピングを取得します。

------
#### [ IMDSv2 ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/block-device-mapping/
```

------
#### [ IMDSv1 ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/
```

------

レスポンスにはインスタンスのブロックデバイスの名前が含まれます。例えば、インスタントストアバック `m1.small` インスタンスの出力は次のようになります。

```
ami
ephemeral0
root
swap
```

`ami` デバイスはインスタンスによって判断されるルートデボリュームです。インスタンスストアボリュームの名前は `ephemeral[0-23]` です。`swap` デバイスはページファイル用です。EBS ボリュームもマップした場合、そのボリュームは`ebs1`、`ebs2` のように表示されます。

ブロックデバイスマッピングの個別のブロックデバイスの詳細を確認するにはここで示すように、前のクエリにブロックデバイスの名前を追加します。

------
#### [ IMDSv2 ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
```

------
#### [ IMDSv1 ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
```

------

#### Windows インスタンス
<a name="hdd-ssd-instance-store-windows"></a>

まず、実行中にインスタンスに接続します。インスタンスからこのクエリを使用して、そのブロックデバイスマッピングを取得します。

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/
```

レスポンスにはインスタンスのブロックデバイスの名前が含まれます。例えば、インスタントストアバック `m1.small` インスタンスの出力は次のようになります。

```
ami
ephemeral0
root
swap
```

`ami` デバイスはインスタンスによって判断されるルートデボリュームです。インスタンスストアボリュームの名前は `ephemeral[0-23]` です。`swap` デバイスはページファイル用です。EBS ボリュームもマップした場合、そのボリュームは`ebs1`、`ebs2` のように表示されます。

ブロックデバイスマッピングの個別のブロックデバイスの詳細を確認するにはここで示すように、前のクエリにブロックデバイスの名前を追加します。

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
```