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

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

現在、Ubuntu は、Ubuntu クラウド イメージの 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 の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確かめる必要があります。 詳細については、Linux のインストールに関する注意事項に関するページを参照してください。

手動の手順

Note

Azure 用の独自のカスタム Ubuntu イメージを作成する前に、代わりに Ubuntu クラウド イメージの Web ページに掲載されているビルド済みでテスト済みのイメージを使用することを検討してください。

  1. Hyper-V マネージャーの中央のペインで VM を選びます。

  2. [接続] を選んで、VM のウィンドウを開きます。

  3. イメージ内の現在のリポジトリを置き換えて、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
    
  4. 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
    
  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

    NetworkManagerNetworkManager-gnome のパッケージがインストールされている場合は、walinuxagent パッケージによって削除されます。

  9. 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
    
  10. 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
    
  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
    
    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
    
  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-VHD」の Convert-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 を作成する)」を参照してください。