次の方法で共有


Azure 用の Ubuntu 仮想マシンの準備

適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット

Ubuntu には、Azure での正常なプロビジョニングに必要なすべてのコンポーネント ( cloud-init、Azure 最適化カーネル、Azure ゲスト エージェントの互換性、仮想化環境のパフォーマンスチューニングされた既定値など) が含まれる公式の Azure 対応クラウド イメージ (cloudimg) が用意されています。 これらのイメージは、Azure VM のプロビジョニング要件に合わせ、必要な手動構成手順を減らすので、カスタム VHD を作成する際の開始点として推奨されます。

Ubuntu は、 https://cloud-images.ubuntu.com/ Web サイトで、すぐに使用できる Azure 仮想ハード ディスク (VHD) を含む複数の形式でこれらのイメージを発行します。 Azure 用の特殊な Ubuntu イメージを構築する必要がある場合は、これらの検証済み VHD ビルドから開始し、必要に応じてカスタマイズできます。 最新のイメージ リリースは、次の場所で入手できます。

前提条件

この記事では、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 との競合が回避されます。 LVMRAID もデータ ディスクで使用できます。
  • OS ディスクにスワップ パーティションまたはスワップ ファイルを構成しないでください。 cloud-init プロビジョニング エージェントを構成して、一時リソース ディスク上にスワップ ファイルまたはスワップ パーティションを作成できます。 このプロセスの詳細については、「 Azure Linux VM の SWAP パーティションを作成する」を参照してください。
  • Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確認する必要があります。 詳細については、「Linux のインストールに関する注記」をご覧ください。

事前構築済みの Ubuntu イメージを Azure に直接アップロードし、結果の VHD を使用して新しい仮想マシンを作成できます。 .vhd ファイルを初めてアップロードする場合は、「カスタム ディスクから Linux VM を作成する」を参照してください。

手動の手順

Note

Azure 用のカスタム Ubuntu イメージを独自に作成する前に、Ubuntu Cloud Images web ページにある構築およびテスト済みのイメージを使用することを検討してください。

Windows を使用して事前構築済みのイメージを抽出する場合は、Windows WSL を使用して次のコマンドを実行してください

     sudo tar --sparse -xvzf <image name>-azure.vhd.tar.gz 
  1. Hyper-V マネージャーの中央のウィンドウで VM を選択します。

  2. [接続] を選択すると、VM のコンソール ウィンドウが開きます。

  3. イメージ内の現在のリポジトリを置き換えて、Ubuntu の Azure リポジトリを使用します。

    /etc/apt/sources.list /etc/apt/sources.list.d/ubuntu.sourcesを編集する前に、バックアップを作成することをお勧めします。

    Ubuntu 22.04 以前の場合

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    

    Ubuntu 24.04 以降の場合

    sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
    

    Ubuntu 22.04 以前の場合

    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 update
    
    

    Ubuntu 24.04 以降の場合

    sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources
    sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources
    sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources
    sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources
    sudo apt update
    
    
  4. Ubuntu Azure イメージでは、Azure-Tailored Kernels 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
    
  5. 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"
    
  6. このファイルを保存して閉じてから、sudo update-grub を実行します。 このステップにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure テクニカル サポートでの問題のデバッグに利用できるようになります。

  7. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定の設定です。

  8. 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 パッケージによってこれらのパッケージが削除される場合があります。

  9. cloud-init の既定の構成を削除し、Azure での cloud-init プロビジョニングと競合する可能性がある残りの netplan アーティファクト: Ubuntu 22.04 以前の場合

    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
    

    Ubuntu 24.04 以降の場合

    sudo rm -f /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
    
  10. Azure データ ソースを使用してシステムをプロビジョニングするように cloud-init を構成します。

    sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg <<EOF
    datasource_list: [ Azure ]
    EOF
    
    sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg <<EOF
    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
    
    sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg <<EOF
    reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  11. 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
    
    sudo tee -a /etc/waagent.conf <<EOF
    # 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
    
  12. 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
    
  13. VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

    Note

    sudo waagent -force -deprovision+user コマンドでは、システムをクリーンアップし、再プロビジョニングに適した状態にすることで、イメージを一般化します。 +user オプションを指定すると、前回プロビジョニングされたユーザー アカウントおよび関連付けられたデータも削除されます。

    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    

    警告

    先程のコマンドを使用したプロビジョニング解除により、イメージからすべての機密情報が削除され、イメージが再配布に適した状態になることが保証されるわけではありません。

  14. Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。

  15. Azure では、固定サイズの VHD のみが許容されます。 VM の OS ディスクが固定サイズの VHD でない場合は、Convert-VHD PowerShell コマンドレットを使用して -VHDType Fixed オプションを指定します。 詳細については、Convert-VHDConvert-VHD のドキュメントを参照してください。

  16. 第 2 世代 VM を Azure で利用するには、次の手順のようにします。

    1. ディレクトリを boot EFI ディレクトリに変更します。

      cd /boot/efi/EFI
      
    2. ubuntu ディレクトリを boot という新しいディレクトリにコピーします。

      sudo cp -r ubuntu/ boot
      
    3. 新しく作成したブート ディレクトリにディレクトリを変更します。

      cd boot
      
    4. shimx64.efi ファイルの名前を変更します。

      sudo mv shimx64.efi bootx64.efi
      
    5. 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 を作成する)」を参照してください。