Amazon EC2 AMI의 부팅 모드 설정하기
Amazon EC2 AMI의 부팅 모드 설정하기 (Set the boot mode of an Amazon EC2 AMI)
기본적으로 AMI는 AMI를 만드는 데 사용한 EC2 인스턴스의 부팅 모드를 물려받아요. 특정 경우에는 이 기본값을 덮어쓸 수 있어요.
출처: 문서
본문
예를 들어 Legacy BIOS에서 실행 중인 EC2 인스턴스로 AMI를 만들면 새 AMI의 부팅 모드는 legacy-bios예요. 부팅 모드가 uefi-preferred인 인스턴스로 만들면 새 AMI의 부팅 모드도 uefi-preferred예요. AMI 생성 시 기본 부팅 모드를 uefi로 덮어쓰려면 부팅 모드 재정의(override)를 지정할 수 있어요. 지원되는 재정의 값은 uefi뿐이고, 현재 인스턴스 부팅 모드가 uefi여야 해요. 이 옵션으로 AMI의 부팅 모드를 uefi-preferred에서 uefi로 덮어쓸 수 있어요. 이렇게 하면 AMI에서 시작한 인스턴스가 Legacy BIOS로 폴백해 UEFI 종속 기능을 잃는 것을 막을 수 있어요. 인스턴스 부팅 모드가 이미 uefi라면 uefi 재정의를 지정해도 효과가 없어요. 다른 재정의는 지정할 수 없어요(예: legacy-bios를 uefi로, 또는 uefi를 uefi-preferred로는 못 바꿔요).
기존 Legacy BIOS 기반 인스턴스를 UEFI로, 또는 기존 UEFI 기반 인스턴스를 Legacy BIOS로 변환하려면 먼저 인스턴스의 볼륨과 운영 체제를 선택한 부팅 모드를 지원하도록 수정하고, 볼륨의 스냅샷을 만든 뒤, 그 스냅샷으로 AMI를 등록해야 해요. 등록할 때 AMI 부팅 모드를 uefi, legacy-bios, uefi-preferred 중 하나로 설정할 수 있어요.
AMI 부팅 모드가 uefi-preferred이면 인스턴스는 다음과 같이 부팅해요.
- UEFI와 Legacy BIOS를 모두 지원하는 인스턴스 유형(예:
m5.large)은 UEFI로 부팅해요. - Legacy BIOS만 지원하는 인스턴스 유형(예:
m4.large)은 Legacy BIOS로 부팅해요.
AMI 부팅 모드를 uefi-preferred로 설정하면 운영 체제가 UEFI와 Legacy BIOS 둘 다로 부팅할 수 있는 능력을 지원해야 해요.
고려 사항 (Considerations)
- AMI 부팅 모드 파라미터를 설정한다고 해서 운영 체제가 자동으로 해당 부팅 모드에 맞게 구성되지는 않아요. 먼저 인스턴스의 볼륨과 운영 체제를 선택한 부팅 모드로 부팅을 지원하도록 적절히 수정해야 해요. 그렇지 않으면 결과 AMI를 사용할 수 없어요. 예를 들어 Legacy BIOS 기반 Windows 인스턴스를 UEFI로 변환하려면 Microsoft의 MBR2GPT 도구를 써서 시스템 디스크를 MBR에서 GPT로 변환할 수 있어요. 필요한 수정은 운영 체제별로 달라요.
register-image명령이나Register-EC2Imagecmdlet으로 NitroTPM과 UEFI Preferred를 모두 지원하는 AMI를 만들 수는 없어요.- UEFI Secure Boot 같은 일부 기능은 UEFI로 부팅하는 인스턴스에서만 사용할 수 있어요.
uefi-preferredAMI 부팅 모드 파라미터를 UEFI를 지원하지 않는 인스턴스 유형과 함께 쓰면 인스턴스가 Legacy BIOS로 시작하고 UEFI 종속 기능이 비활성화돼요. UEFI 종속 기능을 반드시 써야 한다면 AMI 부팅 모드 파라미터를uefi로 설정하세요.
AMI의 부팅 모드 설정하기 (AWS CLI)
- 인스턴스의 볼륨과 운영 체제를 선택한 부팅 모드로 부팅을 지원하도록 적절히 수정하세요. 이 단계를 수행하지 않으면 AMI를 사용할 수 없어요(경고).
- 인스턴스의 볼륨 ID를 찾으려면
describe-instances명령을 사용해요.
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"
}
}
]
]
- 볼륨의 스냅샷을 만들려면
create-snapshot명령을 사용해요.
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": []
}
- 스냅샷 상태가
completed가 될 때까지 기다리고,describe-snapshots명령으로 상태를 확인해요.
aws ec2 describe-snapshots \
--snapshot-ids snap-0abcdef1234567890 \
--query 'Snapshots[].State' \
--output text
- 새 AMI를 만들려면
register-image명령을 사용하되, CreateSnapshot 출력의SnapshotId값을 쓰고, 부팅 모드를 UEFI로 설정하려면--boot-mode파라미터를uefi로 지정해요.
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
- (선택) 새 AMI가 지정한 부팅 모드를 가지는지
describe-images명령으로 확인해요.
aws ec2 describe-images \
--image-id ami-1234567890abcdef0 \
--query 'Images[].BootMode' \
--output text
AMI의 부팅 모드를 UEFI로 설정하기 (AWS CLI)
- 인스턴스의 볼륨과 운영 체제를 선택한 부팅 모드를 지원하도록 수정하세요(하지 않으면 AMI를 쓸 수 없어요).
- 현재 인스턴스 부팅 모드가 UEFI인지
describe-instances명령으로 확인해요.
aws ec2 describe-instances \
--instance-ids i-1234567890abcdef0 \
--query 'Reservations[].Instances[].CurrentInstanceBootMode' \
--output text
출력이 legacy-bios라면 이 인스턴스로는 부팅 모드가 uefi인 AMI를 만들 수 없어요. 앞의 "AMI의 부팅 모드 설정하기" 절차를 사용하세요.
- 새 AMI를 만들려면
create-image명령에--boot-mode-override파라미터를uefi로 설정해요.
aws ec2 create-image \
--instance-id i-1234567890abcdef0 \
--name "my-image" \
--description "my image" \
--boot-mode-override uefi
다음은 예시 출력이에요.
{
"ImageId": "ami-0123456789abcdef0"
}
- (선택)
describe-images명령으로 새 AMI의 부팅 모드를 확인해요.
aws ec2 describe-images \
--image-id ami-1234567890abcdef0 \
--query 'Images[].BootMode' \
--output text
AMI의 부팅 모드 설정하기 (PowerShell)
- 인스턴스의 볼륨과 운영 체제를 선택한 부팅 모드를 지원하도록 수정하세요.
- 인스턴스의 볼륨 ID를 찾으려면
Get-EC2Instancecmdlet을 사용해요.
(Get-EC2Instance `
-InstanceId i-1234567890abcdef0).Instances.BlockDeviceMappings.Ebs
- 볼륨의 스냅샷을 만들려면
New-EC2Snapshotcmdlet을 사용해요.
New-EC2Snapshot `
-VolumeId vol-01234567890abcdef `
-Description "my snapshot"
- 스냅샷 상태가
completed가 될 때까지 기다리고Get-EC2Snapshotcmdlet으로 확인해요.
(Get-EC2Snapshot `
-SnapshotId snap-0abcdef1234567890).State.Value
- 새 AMI를 만들려면
Register-EC2Imagecmdlet을 사용하되, New-EC2Snapshot 출력의SnapshotId값을 쓰고, 부팅 모드를 UEFI로 설정하려면-BootMode파라미터를uefi로 지정해요.
$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
- (선택)
Get-EC2Imagecmdlet으로 새 AMI의 부팅 모드를 확인해요.
(Get-EC2Image `
-ImageId ami-1234567890abcdef0).BootMode.Value