[アップデート] カスタム AMI でブートモードに UEFI 優先モードを指定出来るようになりました

2023.03.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

本日のアップデートで EC2 の AMI 作成時に UEFI 優先モードを指定出来るようになったようです。
What's New at AWS でまだ確認出来ていませんが AWS 公式ドキュメントは更新されており、AWS CLI 上でも利用可能となっています。

何が出来るようになったのかどういう挙動になるのかまとめたので紹介します。

追記

What's New at AWS 出ました。

ブートモード

本日時点では EC2 のブートモードとしては以下の 2 種類がサポートされています。

  • Unified Extensible Firmware Interface (UEFI)
  • レガシー BIOS

AMI のブートモード

EC2 インスタンス作成時に使用する AMI にはブートモードの設定がされています。
AWS 提供のデフォルトの AMI など、ブートモードが指定されていないものも存在します。

% aws ec2 describe-images --image-id ami-0329eac6c5240c99d --query "Images[*].BootMode"
[]
% aws ec2 describe-images --image-id ami-0a52bd39a9f1adceb --query "Images[*].BootMode"
[
    "uefi"
]
% aws ec2 describe-images --image-id ami-057bf4643dfec1eac --query "Images[*].BootMode"
[
    "legacy-bios"
]

これは、この AMI で利用出来るブートモードを示しています。

インスタンスタイプによってサポートされるブートモードが異なる

インスタンスタイプごとに対応可能なブートモードが決まっています。
簡単にまとめると Nitro 世代はレガシー BIOS と UEFI どちらも利用可能で、Graviton は UEFI のみ、旧世代はレガシー BIOS のみとなっているようです。

% aws ec2 --region ap-northeast-1 describe-instance-types --instance-types t3.nano --query "InstanceTypes[*].SupportedBootModes" 
[
    [
        "legacy-bios",
        "uefi"
    ]
]
% aws ec2 --region ap-northeast-1 describe-instance-types --instance-types t4g.nano --query "InstanceTypes[*].SupportedBootModes"
[
    [
        "uefi"
    ]
]
% aws ec2 --region ap-northeast-1 describe-instance-types --instance-types t2.nano --query "InstanceTypes[*].SupportedBootModes" 
[
    [
        "legacy-bios"
    ]
]

ただし NITRO SYSTEM に構築されるインスタンスでも、以下は UEFI はサポートされていません。

  • ベアメタルインスタンス
  • DL1
  • G4ad
  • P4
  • u-3tb1, u-6tb1, u-9tb1, u-12tb1
  • VT1

インスタンス起動時に設定されるブートモード

インスタンス起動時には AMI で設定されているブートモードとインスタンスタイプに従ってブートモードが決定されます。

まず AMI で利用可能と設定されたブートモードに従って起動されます。
そのため、ブートモードが UEFI と指定された AMI を t2 で起動することは出来ません。

非 Graviton な Nitro インスタンスタイプであればレガシー BIOS と UEFI のどちらもサポートされていますのでレガシー BIOS が指定された AMI の場合は t2 と t3 のどちらでも起動することが出来ます。

そして、AWS から提供されている AMI などでブートモードが指定されていないものについては次のようなルールでデフォルトのブートモードが決定されます。

  • Graviton は UEFI
  • それ以外はレガシー BIOS

そのため、本日時点で最新の Amazon Linux 2 (x86) の公式イメージ(ami-0329eac6c5240c99d)を使って t3.nano でインスタンスを作成するとレガシー BIOS がブートモードとなります。

AMI のブートモードに「UEFI 優先」が指定出来るようになった

この AMI のブートモードですが、スナップショットからカスタム AMI を作成する際にブートモードを指定します。
従来はカスタム AMI を作成する際には UEFI とレガシー BIOS をひとつの AMI でどちらもサポートするということが出来ませんでした。

これが今回のアップデートによって UEFI Prefferd (UEFI 優先)が新たに設定出来るようになりました。
記事執筆時点ではマネジメントコンソール上からは設定出来ませんでしたが、AWS CLI の v1.27.84 以上を使ってスナップショットからの AMI 作成時に指定することが出来ます。

おそらくマネジメントコンソール上へもすぐに反映されるのではと思っています。

BootMode パラメータで uefi-preferred を指定するだけ

使い方は簡単で、register-image コマンドを使う際の BootMode パラメータで新たに uefi-preferred が指定出来るようになっています。
こちらを指定するだけです。

% aws-v1 --version
aws-cli/1.27.84 Python/3.9.8 Darwin/22.3.0 botocore/1.29.84

% cat hoge.json
{
    "Name": "hoge0304image-uefipreferred",
    "Architecture": "x86_64",
    "RootDeviceName": "/dev/sda1",
    "BlockDeviceMappings": [
        {
            "DeviceName": "/dev/sda1",
            "Ebs": {
                "SnapshotId": "snap-0a82250b3d84fcb00",
                "VolumeSize": 8,
                "VolumeType": "gp2",
                "DeleteOnTermination": true
            }
        }
    ],
    "EnaSupport": true,
    "BootMode": "uefi-preferred"
}

% aws-v1 ec2 register-image --cli-input-json file://hoge.json
{
    "ImageId": "ami-036209030452003a4"
}

作成された AMI のブートモードがマネジメントコンソール上で uefi-preffered に設定されていることが確認出来ます。

どちらのブートモードも使える AMI という設定なので、t2 でも t3 でもどちらからも AMI は利用可能です。
それぞれのインスタンスタイプで起動してブートモードを確認してみましょう。

t2.nano ではレガシー BIOS

t3.nano では UEFI

どちらでも起動出来るようになっていますね。

さいごに

本日は カスタム AMI でブートモードに UEFI 優先モードを指定出来るようになったので確認してみました。

公式ドキュメントにも注意書きがあるのですが、AMI のブートモードはインスタンスの起動モードが変わるというだけでオペレーティングシステム上自動で設定が切り替わるわけではないです。
UEFI に依存した設定が存在する場合はその点注意しましょう。