Azure 用の Debian VHD の準備

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

前提条件

このセクションでは、Debian Web サイトから仮想ハード ディスク (VHD) にダウンロードした .iso ファイルから Debian Linux オペレーティング システムを既にインストールしているものと想定しています。 .vhd ファイルを作成するツールはいくつかあります。 Hyper-V は 1 つの例にすぎません。 Hyper-V の使用方法については、Hyper-V の役割のインストールと仮想マシン (VM) の構成に関するページを参照してください。

インストールに関する注記

  • Azure 用に Linux を準備する場合のその他のヒントについては、「Linux のインストールに関する一般的な注記」を参照してください。
  • 新しい VHDX 形式は、Azure ではサポートされていません。 Hyper-V マネージャーまたは convert-vhd コマンドレットを使って、ディスクを VHD 形式に変換できます。
  • Linux システムをインストールする場合は、Logical Volume Manager (LVM) (通常、多くのインストールで既定) ではなく標準パーティションを使用することをお勧めします。 パーティションを使うと、特に OS ディスクをトラブルシューティングのために別の VM に接続する必要がある場合に、LVM 名と、クローンされた VM との競合が回避されます。 LVMRAID もデータ ディスクで使用できます。
  • OS ディスクにスワップ パーティションを構成しないでください。 Azure Linux エージェントは、一時的なリソース ディスク上にスワップ ファイルを作成するよう構成できます。 詳細については、次の手順を参照してください。
  • Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確かめる必要があります。 詳細については、Linux のインストールに関する注意事項に関するページを参照してください。

Azure 用の Debian イメージを準備する

完全自動インストール (FAI) クラウド イメージ ビルダーを使用して、基本の Azure Debian クラウド イメージを作成できます。 FAI を使用せずにイメージを準備するには、一般的な手順に関する記事をご確認ください。

次の git clone と apt インストール コマンドは、Debian クラウド イメージ リポジトリから取得されたものです。 まず、リポジトリをクローンし、依存関係をインストールします。

$ git clone https://salsa.debian.org/cloud-team/debian-cloud-images.git
$ sudo apt install --no-install-recommends ca-certificates debsums dosfstools \
    fai-server fai-setup-storage make python3 python3-libcloud python3-marshmallow \
    python3-pytest python3-yaml qemu-utils udev
$ cd ./debian-cloud-images

省略可能: スクリプト (シェル スクリプトなど) を ./config_space/scripts/AZURE に追加して、ビルドをカスタマイズします。

イメージをカスタマイズするスクリプトの例

$ mkdir -p ./config_space/scripts/AZURE
$ cat > ./config_space/scripts/AZURE/10-custom <<EOF
#!/bin/bash

\$ROOTCMD bash -c "echo test > /usr/local/share/testing"
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/10-custom

イメージをカスタマイズするすべてのコマンドに $ROOTCMD プレフィックスを付けます。 これは、chroot $target というエイリアスになります。

Azure Debian イメージをビルドする

$ make image_[release]_azure_amd64

このコマンドにより、現在のディレクトリにいくつかのファイルが出力されます。最も重要なのは image_[release]_azure_amd64.raw イメージ ファイルです。

Azure 用の VHD に未加工イメージを変換します。

rawdisk="image_[release]_azure_amd64.raw"
vhddisk="image_[release]_azure_amd64.vhd"

MB=$((1024*1024))
size=$(qemu-img info -f raw --output json "$rawdisk" | \
gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')

rounded_size=$(((($size+$MB-1)/$MB)*$MB))
rounded_size_adjusted=$(($rounded_size + 512))

echo "Rounded Size Adjusted = $rounded_size_adjusted"

sudo qemu-img resize "$rawdisk" $rounded_size
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc "$rawdisk" "$vhddisk"

このプロセスでは、Azure ディスクに正常にコピーできるように、丸められたサイズの VHD image_[release]_azure_amd64.vhd が作成されます。

Note

salsa リポジトリをクローンしてイメージをローカルにビルドするのではなく、現在の安定したイメージをビルドして、FAI からダウンロードできます。

安定した Debian VHD イメージを作成した後、アップロードする前に、次のパッケージがインストールされていることを確認します。

  • apt-get install hyperv-daemons
  • apt-get install waagent # "(省略可能ですが、パスワードのリセットと拡張機能の使用は推奨対象)"
  • apt-get install cloud-init

次に、完全なアップグレードを実行します。

  • apt-get full-upgrade

ここで、このイメージに対して Azure リソースを作成する必要があります。 この例では $rounded_size_adjusted 変数を使用するため、前の手順と同じシェル プロセス内から行う必要があります。

az group create -l $LOCATION -n $RG

az disk create \
    -n $DISK \
    -g $RG \
    -l $LOCATION \
    --for-upload --upload-size-bytes "$rounded_size_adjusted" \
    --sku standard_lrs --hyper-v-generation V1

ACCESS=$(az disk grant-access \
    -n $DISK -g $RG \
    --access-level write \
    --duration-in-seconds 86400 \
    --query accessSas -o tsv)

azcopy copy "$vhddisk" "$ACCESS" --blob-type PageBlob

az disk revoke-access -n $DISK -g $RG
az image create \
    -g $RG \
    -n $IMAGE \
    --os-type linux \
    --source $(az disk show \
        -g $RG \
        -n $DISK \
        --query id -o tsv)
az vm create \
    -g $RG \
    -n $VM \
    --ssh-key-value $SSH_KEY_VALUE \
    --public-ip-address-dns-name $VM \
    --image $(az image show \
        -g $RG \
        -n $IMAGE \
        --query id -o tsv)

ローカル コンピューターから Azure ディスクへの帯域幅により、azcopy でのアップロードの処理に長時間かかる場合は、Azure VM ジャンプボックスを使用してプロセスを高速化できます。 このプロセスを実行する方法を以下に示します。

  1. ローカル マシンに VHD の tarball を作成します: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd
  2. Azure Linux VM (任意のディストリビューション) を作成します。 必ず、抽出した VHD を保持するのに十分なサイズのディスクを使用して作成してください。
  3. Azure Linux VM に azcopy ユーティリティをダウンロードします。 「AzCopy を使ってみる」で取得できます。
  4. tarball を VM にコピーします: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~
  5. VM で、VHD (tar -xf ./image_buster_azure_amd64.vhd.tar.gz) を抽出します。 この手順は、ファイルのサイズに基づいて少し時間がかかります。
  6. 最後に、VM で、azcopy (上記のコマンド) を使用して VHD を Azure ディスクにコピーします。

これで、Debian Linux VHD を使用して Azure に新しい VM を作成する準備ができました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。