VMware Cloud on AWSにAmazon Linux 2023を構築する

みんな大好きAmazon Linuxには、実は仮想化環境で稼働するための専用イメージがあります

こんにちは、AWS事業本部の荒平(@0Air)です。

Amazon Linux 2023 (AL2023)は、主にAWSで稼働するOSですが、実はVMware環境用にカスタマイズされたイメージが用意されています。
AWS環境用とVMware環境用に少し差分があり、設定手順が少し異なるため、これをまとめてみます。

vSphere環境で積極的にAmazon Linuxを推す理由は乏しいものの、たとえば現状AWSで開発していて、VMware Cloud on AWSの空きリソースで実験的に使う場合や、有事の際のスタンバイとして用意しておくケースが考えられます。

Amazon Linux 2023の特徴については以下記事もご覧ください。

3行まとめ

  • VMware Cloud on AWSやオンプレミスVMware環境でもAmazon Linux 2023が利用可能
  • (AWSでは自動で行われる)初期設定をする必要があり、ひと手間を施さなければならない
  • VMware環境用イメージはパッケージ内容がAWSのものと少し変わっている

Amazon Linux 2023 on VMware 要件

公式ドキュメントは以下ページです。

VMwareホスト要件

Amazon Linux 2023をVMware環境で稼働させるには、以下の要件を満たす必要があります。

  • Intel(R) Xeon(R) Platinum 8275CL プロセッサを搭載したvSphere 8.0
  • 仮想マシンHWバージョン13 (VMware ESXi 6.5 以降)

なお、VMware Cloud on AWSではバージョンが常に最新化されるため、要件はクリアしています。

デバイスサポート要件

以下のデバイスモデルが利用できます。

  • vmw_pvscsi : VMware準仮想化SCSIコントローラー
  • vmxnet3 : VMware準仮想化ネットワークデバイス
  • ata_piix : 仮想化CD-ROM用のレガシーIDEコントローラー

以下のデバイスモデルは有効ですが、十分にテストされておらず、不完全な場合があります。

  • vmw_vmci , vsock : VMware ゲストエージェント用の仮想化ソケットトランスポート
  • vmw_balloon : メモリバルーニング用のデバイス
  • SVGA : 仮想マシンのグラフィックを処理する仮想デバイス
  • ATキーボード、およびPS/2マウス

ブート要件

VMware環境用OVAでは、BIOSブートモードのみがサポートされています。
UEFIブートを使用すると、既知の問題が発生します。

やってみる

ovaファイルは、イメージをローカル経由でアップロードする(手順1,2)か、インターネットから直接取得する(手順3)ことでデプロイが可能です。

1. VMwareイメージのダウンロード

以下のページから、VMware環境用のAmazon Linux 2023のovaファイルをダウンロードします。
https://cdn.amazonlinux.com/al2023/os-images/latest/

「vmware/」をクリックします。

al2023-vmware_esx-[日付/バージョン]-kernel-6.1-x86_64.xfs.gpt.ova をダウンロードします。

2. ovaファイルのアップロード

コンテンツライブラリにダウンロードしたovaファイルをアップロードします。

なお、S3バケットと連携したコンテンツライブラリの設定手順は以下をご参照ください。

今回はローカルのコンテンツライブラリを作成し、そこにovaファイルをアップロードしていきます。

コンテンツライブラリの画面に移動し、「作成」をクリックします。

コンテンツライブラリの名前を入力し、「次へ」をクリックします。

「ローカルコンテンツライブラリ」を選択し、「次へ」をクリックします。

セキュリティポリシーの適用はそのまま、ストレージはWorkloadDatastoreまたは外部ストレージを選択します。

「完了」をクリックします。

作成したコンテンツライブラリを開き、「アイテムのインポート」をクリックします。

ローカルに保存していたovaファイルをインポートします。

ファイルのアップロードが完了すると、「OVF&OVAテンプレート」から仮想マシンを作成できます。
仮想マシンデプロイに関しては通常の作成と変わらないため割愛します。

3. (参考) URLを直接指定してデプロイ

手順1にてURLを確認して、これを直接指定してデプロイすることができます。
例えば、以下のURLのように、Amazon Linuxのファイルパスを直接入力します。但し、vCenterが直接インターネットを参照できない構成では利用できません。
※ 手順1,2を実施している場合はスキップします。

## 例
https://cdn.amazonlinux.com/al2023/os-images/2023.4.20240401.1/vmware/al2023-vmware_esx-2023.4.20240401.1-kernel-6.1-x86_64.xfs.gpt.ova

4. seed.isoの設定

EC2で用いられるインスタンスメタデータサービス(IMDS)が利用できないため、ネットワーク設定・ホスト名・ユーザーデータなどの初期設定情報を含むseed.isoというファイルを準備します。
※ AL2023の起動自体は前手順が完了した時点で可能ですが、初期設定を行わなければログインができません。

LinuxまたはmacOSにて、以下コマンドを実行します。(ドキュメントでは、Windowsを利用する場合は同等ツールが必要と案内があります)

mkdir seedconfig && cd seedconfig
echo "local-hostname: al2023" > meta-data #ホスト名は自由に変更可
vim user-data

user-dataには以下の情報を記述します。(例)
環境に応じて、カスタマイズしてください。

#cloud-config
#vim:syntax=yaml
users:
# A user by the name 'ec2-user' is created in the image by default.
- default
- name: ec2-user
  sudo: ALL=(ALL) NOPASSWD:ALL
  ssh-authorized-keys:
    - ssh-rsa AAAAB3NzaC1yc2EAAAADA...(略) test@domain
- name: pw-user
  sudo: ALL=(ALL) NOPASSWD:ALL
  lock_passwd: false
  plain_text_passwd: 'password'

EC2に立ち上げる際はec2-userに対してSSHするのが一般的かと思いますが、ここでパスワードを指定することが可能です。
plain_text_passwdにてパスワード指定しています。

seedconfig配下にて、以下のコマンドでファイルをseed.isoにまとめます。

# Linuxの場合
mkisofs -output seed.iso -volid cidata -joliet -rock user-data meta-data

# macOSの場合
hdiutil makehybrid -o seed.iso -hfs -joliet -iso -default-volume-name cidata .

データストアにアップロードし、仮想マシンにマウントできるようにします。

仮想マシンの設定を開き、「新規デバイスを追加」から「CD/DVDドライブ」を追加し、seed.isoを指定します。

仮想マシンの電源を入れて、ログインできることを確認します。

無事にログイン確認できました!
NSXなどの設定によりインターネット接続できる状態であれば、yumコマンドは通常通り利用できます。

参考:

パッケージ差分

Amazon Linux 2023の標準インストールされているパッケージと、VMware用ovaに標準インストールされているパッケージは異なります。
公式ページにてまとめられていますが、ここでは差分のみ抜き出して紹介します。

パッケージの差分リスト

パッケージ AMI VMware OVA
acpid 2.0.32
amazon-chrony-config 4.3
amazon-ec2-net-utils 2.4.1
amazon-linux-onprem 1.2
amazon-linux-repo-cdn 2023.3.20240219
amazon-linux-repo-s3 2023.3.20240219
amazon-linux-sb-keys 2023.1 2023.1
amazon-onprem-network 1.2
aws-cfn-bootstrap 2.0
c-ares 1.19.0
cloud-init-cfg-ec2 22.2.2
cloud-init-cfg-onprem 22.2.2
dracut-config-ec2 3.0
ec2-hibinit-agent 1.0.8
ec2-instance-connect 1.1
ec2-instance-connect-selinux 1.1
ec2-utils 2.1.0
fuse-common 3.10.4
fuse-libs 2.9.9 2.9.9
fused3 3.10.4
fused3-libs 3.10.4
grub2-pc 2.06
jq 1.6
kernel-livepatch-repo-cdn 2023.3.20240219
kernel-livepatch-repo-s3 2023.3.20240219
kernel-modules-extra 6.1.77
kernel-modules-extra-common 6.1.77
libdhash 0.5.0
libldb 2.6.2
libmspack 0.10.1
libsss_certmap 2.5.0
libtalloc 2.3.4
libtdb 1.4.7
libtevent 0.13.0
libtool-ltdl 2.4.7
libxslt 1.1.34
oniguruma 6.9.7.1
open-vm-tools 12.3.0
policycoreutils-python-utils 3.4
python-chevron 0.13.1
python3-daemon 2.3.0
python3-lockfile 0.12.2
sssd-common 2.5.0
sssd-kcm 2.5.0
xmlsec1 1.2.33
xmlsec1-openssl 1.2.33
zram-generator 1.1.2
zram-generator-defaults 1.1.2

基本的にはAWSのみで使うもの、VMwareのみで使うもの、とそれぞれ区別されています。
よく使いそうでVMware OVA側に入っていないパッケージは、この中ではjqでしょうか。
もし必要であれば、sudo yum install jqでインストールできます。

おわりに

クラウド化を推進する中で、過渡期構成としてAL2023をVMware環境で利用する必要がでてくるケースもあるかと思い、Amazon Linux 2023をVMware環境に立ててみました。
初期設定(seed.iso)は作り込むとかなり大変なので、普段意識することはありませんが、インスタンスメタデータサービス(IMDS)の便利さを思い知りました。

このエントリが誰かの助けになれば幸いです。

それでは、AWS事業本部 コンサルティング部の荒平(@0Air)がお送りしました!

参考