

# Amazon EC2 AMI의 부팅 모드 설정
<a name="set-ami-boot-mode"></a>

기본적으로 AMI는 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와 레거시 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) cmdlet을 사용하여 [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` 상태가 될 때까지 기다렸다가 다음 단계로 이동합니다. 스냅샷의 상태를 가져오려면 이전 단계에서 얻은 스냅샷 ID와 함께 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) 명령을 사용합니다.

   ```
   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) cmdlet을 사용합니다.

   ```
   (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) cmdlet을 사용합니다. 이전 단계의 볼륨 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` 상태가 될 때까지 기다렸다가 다음 단계로 이동합니다. 스냅샷의 상태를 가져오려면 이전 단계에서 얻은 스냅샷 ID와 함께 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html) cmdlet을 사용합니다.

   ```
   (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) cmdlet을 사용합니다. **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) cmdlet을 사용합니다.

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

   다음은 예제 출력입니다.

   ```
   uefi
   ```

------