

# Amazon EC2 AMI のブートモードを設定する
<a name="set-ami-boot-mode"></a>

デフォルトでは、AMI には、その作成に使用される EC2 インスタンスのブートモードが継承されます。例えば、レガシー BIOS で実行されている EC2 インスタンスから AMI を作成する場合、新しい AMI のブートモードは `legacy-bios` になります。ブートモードが `uefi-preferred` の EC2 インスタンスから AMI を作成する場合、新しい AMI のブートモードは `uefi-preferred` になります。

AMI を登録する際に、AMI のブートモードを `uefi`、`legacy-bios`、または `uefi-preferred` に設定できます。

AMI ブートモードを `uefi-preferred` に設定すると、インスタンスは次のように起動します。
+ UEFI とレガシー BIOS の両方をサポートするインスタンスタイプ (例えば `m5.large` など) の場合、インスタンスは UEFI を使用して起動します。
+ レガシー BIOS のみをサポートするインスタンスタイプ (例えば `m4.large` など) の場合、インスタンスはレガシー BIOS を使用して起動します。

AMI ブートモードを `uefi-preferred` に設定した場合、オペレーティングシステムは UEFI と Legacy BIOS の両方を起動する機能をサポートしている必要があります。

既存のレガシー BIOS ベースのインスタンスを UEFI に、または既存の UEFI ベースのインスタンスをレガシー BIOS に変換するには、まず、選択したブートモードをサポートするように、インスタンスのボリュームとオペレーティングシステムを変更する必要があります。次に、ボリュームのスナップショットを作成します。最後に、スナップショットから AMI を作成します。

**考慮事項**
+ AMI ブートモードパラメータを設定しても、オペレーティングシステムは指定されたブートモードに自動的に変更されません。最初に、インスタンスのボリュームとオペレーティングシステムに対し、選択したブートモードを使用した起動をサポートするための適切な変更を加える必要があります。これを行わないと、作成される AMI を使用できません。例えば、レガシー BIOS ベースの Windows インスタンスを UEFI に変換する場合、Microsoft の [MBR2GPT](https://learn.microsoft.com/en-us/windows/deployment/mbr-to-gpt) ツールを使用して、システムディスクを MBR から GPT に変換できます。ここでの変更内容は、オペレーティングシステムにより異なります。詳細については、オペレーティングシステムのマニュアルを参照してください。
+ [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドまたは [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) コマンドレットを使用して、[NitroTPM](nitrotpm.md) と UEFI Preferred の両方をサポートする AMI を作成することはできません。
+ UEFI セキュアブートなどの一部の機能は、UEFI で起動するインスタンスでのみ使用できます。UEFI をサポートしないインスタンスタイプで `uefi-preferred` AMI ブートモードパラメータを使用すると、インスタンスはレガシー BIOS として起動し、UEFI 依存機能は無効になります。UEFI に依存する機能の可用性を重視する場合は、AMI ブートモードパラメータを `uefi` に設定します。

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

**AMI のブートモードを設定するには**

1. インスタンスのボリュームとオペレーティングシステムに対し、選択したブートモードでの起動をサポートするための適切な変更を加えます。ここでの変更内容は、オペレーティングシステムにより異なります。詳細については、オペレーティングシステムのマニュアルを参照してください。
**警告**  
このステップを実行しないと、AMI は使用不可能になります。

1. インスタンスのボリューム ID を、[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) コマンドを使用して確認します。次のステップでは、このボリュームのスナップショットを作成します。

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

   以下は出力の例です。

   ```
   [
       [
           {
               "DeviceName": "/dev/xvda",
               "Ebs": {
                   "AttachTime": "2024-07-11T01:05:51+00:00",
                   "DeleteOnTermination": true,
                   "Status": "attached",
                   "VolumeId": "vol-1234567890abcdef0"
               }
           }
       ]
   ]
   ```

1. ボリュームのスナップショットを作成するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html) コマンドを使用します。前のステップで取得したボリューム ID を使用します。

   ```
   aws ec2 create-snapshot \
       --volume-id vol-01234567890abcdef \
       --description "my snapshot"
   ```

   以下は出力の例です。

   ```
   {
       "Description": "my snapshot",
       "Encrypted": false,
       "OwnerId": "123456789012",
       "Progress": "",
       "SnapshotId": "snap-0abcdef1234567890",
       "StartTime": "",
       "State": "pending",
       "VolumeId": "vol-01234567890abcdef",
       "VolumeSize": 30,
       "Tags": []
   }
   ```

1. スナップショットの状態が `completed` になるまで待ってから、次のステップに進みます。スナップショットの状態を取得するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) コマンドを前のステップのスナップショット ID と共に使用します。

   ```
   aws ec2 describe-snapshots \
       --snapshot-ids snap-0abcdef1234567890 \
       --query Snapshots[].State \
       --output text
   ```

   以下は出力の例です。

   ```
   completed
   ```

1. 新しい AMI を作成するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) コマンドを使用します。**CreateSnapshot** の出力の `SnapshotId` の値を使用します。
   + ブートモードを UEFI に設定するには、`uefi` の値を使用した `--boot-mode` パラメータを追加します。

     ```
     aws ec2 register-image \
        --description "my image" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi
     ```
   + ブートモードを `uefi-preferred` に設定するには、`--boot-mode` の値を `uefi-preferred` に設定します

     ```
     aws ec2 register-image \
        --description "my description" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi-preferred
     ```

1. (オプション) 新しく作成した AMI が、指定したブートモードに設定されていることを確認するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

   ```
   aws ec2 describe-images \
       --image-id ami-1234567890abcdef0 \
       --query Images[].BootMode \
       --output text
   ```

   以下は出力の例です。

   ```
   uefi
   ```

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

**AMI のブートモードを設定するには**

1. インスタンスのボリュームとオペレーティングシステムに対し、選択したブートモードでの起動をサポートするための適切な変更を加えます。ここでの変更内容は、オペレーティングシステムにより異なります。詳細については、オペレーティングシステムのマニュアルを参照してください。
**警告**  
このステップを実行しないと、AMI は使用不可能になります。

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

   ```
   (Get-EC2Instance `
       -InstanceId i-1234567890abcdef0).Instances.BlockDeviceMappings.Ebs
   ```

   以下は出力の例です。

   ```
   AssociatedResource  : 
   AttachTime          : 7/11/2024 1:05:51 AM
   DeleteOnTermination : True
   Operator            : 
   Status              : attached
   VolumeId            : vol-01234567890abcdef
   ```

1. ボリュームのスナップショットを作成するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html) コマンドレットを使用します。前のステップで取得したボリューム ID を使用します。

   ```
   New-EC2Snapshot `
       -VolumeId vol-01234567890abcdef `
       -Description "my snapshot"
   ```

   以下は出力の例です。

   ```
   AvailabilityZone          : 
   Description               : my snapshot
   Encrypted                 : False
   FullSnapshotSizeInBytes   : 0
   KmsKeyId                  : 
   OwnerId                   : 123456789012
   RestoreExpiryTime         : 
   SnapshotId                : snap-0abcdef1234567890
   SseType                   : 
   StartTime                 : 4/25/2025 6:08:59 PM
   State                     : pending
   StateMessage              : 
   VolumeId                  : vol-01234567890abcdef
   VolumeSize                : 30
   ```

1. スナップショットの状態が `completed` になるまで待ってから、次のステップに進みます。スナップショットの状態を取得するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html) コマンドレットを前のステップのスナップショット ID と共に使用します。

   ```
   (Get-EC2Snapshot `
       -SnapshotId snap-0abcdef1234567890).State.Value
   ```

   以下は出力の例です。

   ```
   completed
   ```

1. 新しい AMI を作成するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) コマンドレットを使用します。**New-EC2Snapshot** の出力の `SnapshotId` の値を使用します。
   + ブートモードを UEFI に設定するには、`uefi` の値を使用した `-BootMode` パラメータを追加します。

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi
     ```
   + ブートモードを `uefi-preferred` に設定するには、`-BootMode` の値を `uefi-preferred` に設定します

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi-preferred
     ```

1. (オプション) 新しく作成した AMI が、指定したブートモードに設定されていることを確認するには、[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

   ```
   (Get-EC2Image `
       -ImageId ami-1234567890abcdef0).BootMode.Value
   ```

   以下は出力の例です。

   ```
   uefi
   ```

------