Azure 用の Ubuntu 仮想マシンの準備
適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット
現在、Ubuntu は、Ubuntu クラウド イメージの Web ページでダウンロードできる公式の Azure 仮想ハード ディスク (VHD) を公開しています。 以下の手動の手順を使わずに Azure 用の独自の Ubuntu イメージを構築する必要がある場合は、これらの動作確認済みの VHD から始めて、必要に応じてカスタマイズしてください。 最新のイメージ リリースは、常に次の場所にあります。
- Ubuntu 18.04/Bionic: bionic-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 20.04/Focal: focal-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 22.04/Jammy: jammy-server-cloudimg-amd64-azure.vhd.zip
前提条件
この記事では、Ubuntu Linux オペレーティング システム (OS) を VHD に既にインストールしていることを前提にしています。 .vhd ファイルを作成するツールはいくつかあります。 たとえば、Hyper-V などの仮想化ソリューションなどです。 詳細については、Hyper-V の役割のインストールと仮想マシン (VM) の構成に関する記事を参照してください。
Ubuntu のインストールに関する注記
- Azure 用に Linux を準備する場合のその他のヒントについては、「Linux のインストールに関する一般的な注記」を参照してください。
- VHDX 形式は Azure ではサポートされていません。サポートされるのは固定 VHD のみです。 Hyper-V マネージャーまたは
Convert-VHD
コマンドレットを使って、ディスクを VHD 形式に変換できます。 - Linux システムをインストールする場合は、Logical Volume Manager (LVM) (通常、多くのインストールで既定) ではなく標準パーティションを使用することをお勧めします。 これらの標準パーティションを使うと、特に OS ディスクをトラブルシューティングのために別の VM に接続する必要がある場合に、LVM 名と、複製された VM との競合が回避されます。 LVM や RAID もデータ ディスクで使用できます。
- OS ディスクにスワップ パーティションまたはスワップ ファイルを構成しないでください。
cloud-init
プロビジョニング エージェントを構成して、一時リソース ディスク上にスワップ ファイルまたはスワップ パーティションを作成できます。 このプロセスの詳細については、以下の手順を参照してください。 - Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確かめる必要があります。 詳細については、Linux のインストールに関する注意事項に関するページを参照してください。
手動の手順
Note
Azure 用の独自のカスタム Ubuntu イメージを作成する前に、代わりに Ubuntu クラウド イメージの Web ページに掲載されているビルド済みでテスト済みのイメージを使用することを検討してください。
Hyper-V マネージャーの中央のペインで VM を選びます。
[接続] を選んで、VM のウィンドウを開きます。
イメージ内の現在のリポジトリを置き換えて、Ubuntu の Azure リポジトリを使用します。
/etc/apt/sources.list
を編集する前に、バックアップを作成することをお勧めします。sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo apt-get update
Ubuntu Azure イメージでは、Azure 向けに調整されたカーネルが使用されるようになりました。 OS を Azure に合わせた最新のカーネルに更新し、Azure Linux ツール (Hyper-V の依存関係を含みます) をインストールします。
sudo apt update sudo apt install linux-azure linux-image-azure linux-headers-azure linux-tools-common linux-cloud-tools-common linux-tools-azure linux-cloud-tools-azure sudo apt full-upgrade sudo reboot
GRUB のカーネルのブート行を変更して Azure の追加のカーネル パラメーターを含めます。 この手順を実行するには、テキスト エディターで
/etc/default/grub
を開き、GRUB_CMDLINE_LINUX_DEFAULT
という変数を探して (または、必要であれば追加して)、次のパラメーターが含まれるように編集します。GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"
このファイルを保存して閉じてから、
sudo update-grub
を実行します。 この手順を実行すると、すべてのコンソール メッセージが最初のシリアル ポートに送信されるようになるため、Azure テクニカル サポートによる問題のデバッグに役立ちます。SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定の設定です。
cloud-init
(プロビジョニング エージェント) と Azure Linux エージェント (ゲスト拡張機能ハンドラー) をインストールします。Cloud-init
では、netplan
を使用して (プロビジョニングとその後の各ブートの間に) システム ネットワークが構成され、gdisk
を使用してリソース ディスクがパーティション分割されます。sudo apt update sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent
Note
NetworkManager
とNetworkManager-gnome
のパッケージがインストールされている場合は、walinuxagent
パッケージによって削除されます。cloud-init
の既定の構成と残っているnetplan
の成果物を削除します。これらは Azure 上のcloud-init
のプロビジョニングと競合する可能性があります。sudo rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg sudo rm -f /etc/cloud/ds-identify.cfg sudo rm -f /etc/netplan/*.yaml
Azure データ ソースを使用してシステムをプロビジョニングするように
cloud-init
を構成します。cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg datasource_list: [ Azure ] EOF cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg system_info: package_mirrors: - arches: [i386, amd64] failsafe: primary: http://archive.ubuntu.com/ubuntu security: http://security.ubuntu.com/ubuntu search: primary: - http://azure.archive.ubuntu.com/ubuntu/ security: [] - arches: [armhf, armel, default] failsafe: primary: http://ports.ubuntu.com/ubuntu-ports security: http://ports.ubuntu.com/ubuntu-ports EOF cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg reporting: logging: type: log telemetry: type: hyperv EOF
Azure Linux エージェントを構成して、プロビジョニングを実行するために
cloud-init
に依存するようにします。 これらのオプションの詳細については、WALinuxAgent プロジェクトのページを参照してください。sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
cat <<EOF | sudo tee -a /etc/waagent.conf # For Azure Linux agent version >= 2.2.45, this is the option to configure, # enable, or disable the provisioning behavior of the Linux agent. # Accepted values are auto (default), waagent, cloud-init, or disabled. # A value of auto means that the agent will rely on cloud-init to handle # provisioning if it is installed and enabled, which in this case it will. Provisioning.Agent=auto EOF
cloud-init
と Azure Linux エージェントのランタイム成果物とログをクリーンします。sudo cloud-init clean --logs --seed sudo rm -rf /var/lib/cloud/ sudo systemctl stop walinuxagent.service sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log
VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
Note
sudo waagent -force -deprovision+user
コマンドでは、システムをクリーンアップし、再プロビジョニングに適した状態にすることで、イメージを一般化します。+user
オプションを指定すると、前回プロビジョニングされたユーザー アカウントおよび関連付けられたデータも削除されます。sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history
警告
上記のコマンドを使用してプロビジョニング解除しても、イメージからすべての機密情報が削除され、再配布に適した状態になることは保証されません。
Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。
Azure では、固定サイズの VHD のみが許容されます。 VM の OS ディスクが固定サイズの VHD でない場合は、
Convert-VHD
PowerShell コマンドレットを使用して-VHDType Fixed
オプションを指定します。 詳細については、「Convert-VHD」のConvert-VHD
のドキュメントを参照してください。第 2 世代 VM を Azure で利用するには、次の手順のようにします。
ディレクトリを
boot EFI
ディレクトリに変更します。cd /boot/efi/EFI
ubuntu
ディレクトリをboot
という新しいディレクトリにコピーします。sudo cp -r ubuntu/ boot
ディレクトリを新しく作成したブート ディレクトリに変更します。
cd boot
ファイルの名前を
shimx64.efi
に変更します。sudo mv shimx64.efi bootx64.efi
grub.cfg
ファイルの名前をbootx64.cfg
に変更します。sudo mv grub.cfg bootx64.cfg
関連するコンテンツ
これで、Ubuntu Linux VHD を使用して Azure に新しい VM を作成する準備ができました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。