ブロックデバイスマッピング
起動する各インスタンスには、Amazon EBS ボリューム、またはインスタンスストアボリュームのどちらかのルートデバイスボリュームが関連付けられています。ブロックデバイスマッピングを使用すると、インスタンスの起動時にそのインスタンスにアタッチする追加の EBS ボリュームまたはインスタンスストアボリュームを指定できます。追加する EBS ボリュームは、実行中のインスタンスにアタッチすることもできます。ただし、インスタンスストアボリュームについては、ブロックデバイスマッピングを使用して、インスタンスの起動時にアタッチする以外方法はありません。
ブロックデバイスマッピングの概念
ブロックデバイスは、一連のバイトまたはビット (ブロック) でデータを移動するストレージデバイスです。これらのデバイスはランダムアクセスをサポートし、バッファ付き I/O を使用します。例にはハードディスク、CD-ROM ドライブ、フラッシュドライブが含まれます。ブロックデバイスは物理的にコンピュータにアタッチできます。また、コンピュータに物理的にアタッチされているかのように、リモートでアクセスすることもできます。
Amazon EC2 は、2 種類のブロックデバイスをサポートしています。
-
インスタンスストアボリューム (基盤となるハードウェアがインスタンスのホストコンピュータに物理的にアタッチされている仮想デバイス)
-
EBS ボリューム (リモートストレージデバイス)
ブロックデバイスマッピングでは、インスタンスにアタッチするブロックデバイス (インスタンスストアボリュームと EBS ボリューム) を定義します。ブロックデバイスマッピングは、AMI 作成プロセスの一環として、AMI から起動されるすべてのインスタンスによって使用されるように指定できます。また、インスタンスの起動時にブロックデバイスマッピングを指定することもできます。起動したインスタンスの AMI ですでに指定されているマッピングは、このマッピングによって上書きされます。インスタンスタイプによってサポートされるすべての NVMe インスタンスストアボリュームが自動的に列挙され、インスタンスの起動時にデバイス名が割り当てられることに注意してください。それらをブロックデバイスマッピングに含めます。含めないとインスタンスは効果がありません。
ブロックデバイスマッピングのエントリ
ブロックデバイスマッピングを作成するとき、インスタンスにアタッチする必要があるブロックデバイスごとに以下の情報を指定します。
-
Amazon EC2 内で使用されるデバイス名。インスタンスのブロックデバイスドライバーは、ボリュームをマウントするときに実際のボリューム名を割り当てます。この割り当てられた名前は、Amazon EC2 が推奨する名前とは異なる可能性があります。詳細については、「Amazon EC2 インスタンス上のデバイス名」を参照してください。
インスタンスストアボリュームの場合は、次の情報も指定します。
-
仮想デバイスの名前:
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
ボリュームでのみ使用)
ブロックデバイスマッピングのインスタンスストアの注意事項
ブロックデバイスマッピングでインスタンスストアボリュームがある場合は、インスタンスを AMIs から起動すると、いくつかの警告が表示されます。
-
インスタンスタイプによって中に含まれるインスタンスストアボリューム数が異なり、インスタンスストアボリュームがまったく含まれないインスタンスタイプもあります。単一インスタンスストアボリュームのみをサポートするインスタンスタイプで、AMI が 2 つのインスタンスストアボリュームにマッピングされている場合、インスタンスは単一のインスタンスストアボリュームのみで起動します。
-
インスタンスストアボリュームをマッピングできるのは、起動時のみに限られます。インスタンスストアボリュームのないインスタンスを停止することはできません (
t2.micro
など)。インスタンスストアボリュームをサポートするインスタンスに変更し、インスタンスストアボリュームを含めて再起動します。ただし、AMI をインスタンスから作成し、インスタンスストアボリュームをサポートするインスタンスタイプで起動して、インスタンスストアボリュームをインスタンスにマッピングすることは可能です。 -
インスタンスストアボリュームをマッピングしたインスタンスを起動し、インスタンスを停止して、インスタンスストアボリュームの少ないインスタンスタイプに変更して再開すれば、最初の起動からマッピングしたインスタンスストアボリュームもインスタンスのメタデータに表示されます。ただし、インスタンスに使用できるのは、そのインスタンスタイプでサポートされているインスタンスストアボリュームの最大数までです。
注記
インスタンスが停止されると、インスタンスストアボリュームのデータはすべて失われます。
-
起動時のインスタンスストア容量によっては、M3 インスタンスが AMI インスタンスストアブロックデバイスのマッピングを (起動時に指定されていない限り) 無視します。インスタンスの起動時にインスタンスストアボリュームを使用するには、起動する AMI ボリュームに AMI でインスタンスストアボリュームがマッピングされていたとしても、起動時にインスタンスストアブロックデバイスのマッピングを指定する必要があります。
ブロックデバイスマッピングの例
この図は、EBS-backed インスタンスのブロックデバイスマッピングの例を示しています。この例では、/dev/sdb
を ephemeral0
にマッピングし、2 つの EBS ボリュームを 1 つは /dev/sdh
に、もう 1 つは /dev/sdj
にマッピングします。また、ルートデバイスボリュームである EBS ボリューム、/dev/sda1
も示しています。
![インスタンス、インスタンスストアボリューム、および EBS ボリュームの間の関係。](images/block_device_mapping_figure.png)
このブロックデバイスマッピングの例は、このトピックのコマンドおよび API の例で使用されています。ブロックデバイスマッピングを作成するコマンドおよび API の例については、AMI 用のブロックデバイスマッピングの指定およびインスタンス起動時のブロックデバイスマッピングの更新を参照してください。
オペレーティングシステムでデバイスを使用できるようにする方法
Amazon EC2 では、ブロックデバイスの記述に、/dev/sdh
や xvdh
などのデバイス名が使われます。また、Amazon EC2 では、EC2 インスタンスにアタッチするブロックデバイスを、ブロックデバイスマッピングで指定します。ストレージデバイスにアクセスするには、インスタンスにアタッチしたブロックデバイスが、オペレーティングシステムによって事前にマウントされていなければなりません。ブロックデバイスがインスタンスからデタッチされると、そのデバイスはオペレーティングシステムによってアンマウントされ、ストレージデバイスにアクセスできなくなります。
Linux インスタンス – ブロックデバイスマッピングで指定されたデバイス名は、インスタンスの初回起動時に対応するブロックデバイスにマッピングされます。デフォルトでフォーマットおよびマウントされるインスタンスストアボリュームは、インスタンスタイプによって決まります。インスタンスタイプで使用できるインスタンスストアボリューム数を超えていない場合は、起動時に追加のインスタンスストアボリュームをマウントできます。詳細については、「Amazon EC2 インスタンスストア」を参照してください。ボリュームがフォーマットおよびマウントされるときに使用されるデバイスは、インスタンスのブロックデバイスドライバーによって決まります。
Windows インスタンス – ブロックデバイスマッピングで指定されたデバイス名は、インスタンスの初回起動時に対応するブロックデバイスにマッピングされ、Ec2Config サービスによってドライブが初期化されマウントされます。ルートデバイスボリュームは、C:\
:\ としてマウントされます。インスタンスストアボリュームは、Z:\
、Y:\
などとしてマウントされます。EBS ボリュームについては、使用可能な任意のドライブ文字を使用してマウントできます。ただし、ドライブ文字を EBS ボリュームに割り当てる方法を設定することができます。詳細については、「Amazon EC2 Windows インスタンスの起動設定を構成する」を参照してください。
AMI ブロックデバイスマッピング
各 AMI にブロックデバイスマッピングがあります。このブロックデバイスマッピングは、AMI からのインスタンスの起動時にそのインスタンスにアタッチするブロックデバイスを指定します。追加のブロックデバイスを AMI に追加するには、独自の AMI を作成する必要があります。
AMI 用のブロックデバイスマッピングの指定
AMI を作成する場合に、ルートボリュームに加えて、ボリュームを指定するには、2 つの方法があります。インスタンスから AMI を作成する前に、実行中のインスタンスにすでにボリュームをアタッチしている場合、AMI のブロックデバイスマッピングにそれらの同じボリュームが含まれます。EBS ボリュームの場合、既存のデータが新しいスナップショットに保存され、それがブロックデバイスマッピングで指定される新しいスナップショットになります。インスタンスストアボリュームの場合、データは維持されません。
EBS-backed AMI の場合、ブロックデバイスマッピングを使用して、EBS ボリュームとインスタンスストアボリュームを追加できます。instance store-backed AMI の場合、イメージの登録時にイメージマニフェストファイルでブロックデバイスマッピングエントリを変更して、インスタンスストアボリュームのみを追加できます。
注記
M3 インスタンスの場合、インスタンスのブロックデバイスマッピングで起動時にインスタンスストアボリュームを指定する必要があります。AMI のブロックデバイスマッピングで指定したインスタンスストアボリュームは、インスタンスブロックデバイスマッピングの一部として指定されていない場合、M3 インスタンスを起動した際に無視される可能性があります。
AMI ブロックデバイスマッピングの EBS ボリュームの表示
AMI のブロックデバイスマッピングの EBS ボリュームを簡単に列挙できます。
インスタンスブロックデバイスマッピング
デフォルトでは、起動するインスタンスには、そのインスタンスを起動した AMI のブロックデバイスマッピングで指定されたストレージデバイスが含まれます。インスタンスを起動するときに、インスタンスのブロックデバイスマッピングへの変更を指定できます。この変更は AMI のブロックデバイスマッピングを上書きするか、このブロックデバイスマッピングに統合されます。
制限事項
-
ルートボリュームの場合、変更できるのはボリュームサイズ、ボリュームタイプ、および [合わせて削除] フラグのみです。
-
EBS ボリュームを変更する場合、そのサイズを小さくすることはできません。そのため、指定するスナップショットのサイズは、AMI のブロックデバイスマッピングで指定されたスナップショットのサイズ以上であることが必要です。
内容
インスタンス起動時のブロックデバイスマッピングの更新
インスタンスの起動時に、EBS ボリュームとインスタンスストアボリュームをインスタンスに追加できます。インスタンスのブロックデバイスマッピングを更新しても、そのインスタンスが起動された AMI のブロックデバイスマッピングは完全には変更されないことに注意してください。
実行中のインスタンスのブロックデバイスマッピングの更新
modify-instance-attribute AWS CLI コマンドを使用して、実行中のインスタンスのブロックデバイスマッピングを更新できます。この属性を変更する前に、インスタンスを停止する必要はありません。
aws ec2 modify-instance-attribute --instance-id i-
1a2b3c4d
--block-device-mappings file://mapping.json
例えば、インスタンスの終了時にルートボリュームを保持するには、mapping.json
で以下を指定します。
[ { "DeviceName": "/dev/sda1", "Ebs": { "DeleteOnTermination": false } } ]
または、Edit-EC2InstanceAttribute コマンド (-BlockDeviceMapping
) で AWS Tools for Windows PowerShell パラメータを使用することもできます。
インスタンスブロックデバイスマッピングの EBS ボリュームの表示
インスタンスにマッピングされた EBS ボリュームを簡単に列挙できます。
注記
2009 年 10 月 31 日 API のリリースよりも前に起動されたインスタンスについては、AWS では、ブロックデバイスマッピングを表示できません。AWS がブロックデバイスマッピングを表示できるようにするには、ボリュームをデタッチしてから再アタッチする必要があります。
インスタンスストアボリュームのインスタンスブロックデバイスマッピングの表示
インスタンスタイプは、インスタンスに利用できるインスタンスストアボリュームの数とタイプを決定します。ブロックデバイスマッピングのインスタンスストアボリュームの数が、インスタンスに利用できるインスタンスストアボリュームの数を超える場合は、追加のボリュームは無視されます。インスタンスのインスタンスストアボリュームを表示するには、lsblk コマンド (Linux インスタンス) を実行するか、Windows ディスク管理 (Windows インスタンス) を開きます。各インスタンスタイプでサポートされるインスタンスストアボリュームの数については、「Amazon EC2 インスタンスタイプの仕様」を参照してください。
インスタンスのブロックデバイスマッピングを表示した場合、EBS ボリュームのみが表示され、インスタンスストアボリュームは表示されません。インスタンスのインスタンスストアボリュームを表示する方法は、ボリュームタイプによって異なります。
NVMe インスタンスストアボリューム
ブロックデバイスマッピング内の NVMe インスタンスストアボリュームをクエリするには、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 ...
Disk Management または PowerShell を使用して、EBS とインスタンスストアの NVMe ボリュームの両方を一覧表示できます。詳細については、「NVMe ボリュームの一覧表示」を参照してください。
HDD もしくは SSD のインスタンスストアボリューム
ブロックデバイスマッピングで HDD もしくは SSD のインスタンスストアボリュームをクエリするには、インスタンスメタデータを使用します。NVMe インスタンスストアボリュームは含まれていません。
インスタンスメタデータのすべてのリクエストの基本 URI は http://169.254.169.254/latest/
です。詳細については、「インスタンスメタデータの使用」を参照してください。
まず、実行中にインスタンスに接続します。インスタンスからこのクエリを使用して、そのブロックデバイスマッピングを取得します。
レスポンスには、インスタンスのブロックデバイスの名前が含まれます。例えば、instance store Backed 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/
レスポンスには、インスタンスのブロックデバイスの名前が含まれます。例えば、instance store Backed 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