背景と目的
Azure のイメージギャラリーで提供されていない OS イメージや、提供されていても有料だったり、オンプレで動かしているアプリ込みの OS を丸ごとカスタムイメージにしたい場合など、何かしら Azure に OS イメージを持ち込みたいケースがあると思います。今回は、リリース前の Ubuntu 22.04 を検証する目的で、Canonical が用意しているデイリービルドの Azure 用 VHD を利用して、Azure VM 作成まで試してみました。
前提条件
コマンドの実施環境は、Mac + Azure CLI です。
bash
$ sw_vers
ProductName: macOS
ProductVersion: 12.2.1
BuildVersion: 21D62
$ az version
{
"azure-cli": "2.32.0",
"azure-cli-core": "2.32.0",
"azure-cli-telemetry": "1.0.6",
"extensions": {}
}
Ubuntu 22.04 の OS イメージをダウンロード
https://cloud-images.ubuntu.com/jammy/20220204/
bash
wget https://cloud-images.ubuntu.com/jammy/20220204/jammy-server-cloudimg-amd64-azure.vhd.zip
unzip jammy-server-cloudimg-amd64-azure.vhd.zip
ls -lh livecd.ubuntu-cpc.azure.vhd
ストレージアカウントに VHD をアップロード
bash
# 環境変数をセットします
region=japaneast
prefix=mnrcust
# リソースグループを作成します
az group create \
--name ${prefix}-rg \
--location $region
# ストレージアカウントを作成します
az storage account create \
--name ${prefix} \
--resource-group ${prefix}-rg \
--sku Standard_LRS
# ストレージアカウントにストレージ BLOB データ共同作成者ロールを自分自身に割り当てます
az ad signed-in-user show \
--query objectId \
--output tsv \
| az role assignment create \
--role "Storage Blob Data Contributor" \
--assignee @- \
--scope $(az storage account show \
--name ${prefix} \
--resource-group ${prefix}-rg \
--query id \
--output tsv)
# コンテナを作成します
az storage container create \
--account-name ${prefix} \
--name disks \
--auth-mode login
# VHD をアップロードします
az storage blob upload \
--account-name ${prefix} \
--container-name disks \
--name livecd.ubuntu-cpc.azure.vhd \
--file livecd.ubuntu-cpc.azure.vhd \
--auth-mode login
検証用の仮想マシンを作る
bash
# ストレージアカウントにアップロードした VHD から管理ディスクを作成します
az disk create \
--resource-group ${prefix}-rg \
--name ubuntu2202-0204 \
--sku Standard_LRS \
--source https://${prefix}.blob.core.windows.net/disks/livecd.ubuntu-cpc.azure.vhd
# 管理ディスクから OS イメージを作成します
az image create \
--resource-group ${prefix}-rg \
--name ubuntu2202-0204 \
--os-type Linux \
--source ubuntu2202-0204
# SSH キーペアをファイル名を指定して作成します
ssh-keygen -m PEM -t rsa -b 4096 \
-f ${prefix}
# 検証用の仮想マシンを作成します
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--os-disk-name ${prefix}-vmOSDisk \
--image ubuntu2202-0204 \
--size Standard_B1ls \
--admin-username azureuser \
--ssh-key-value ${prefix}.pub \
--nsg-rule NONE \
--public-ip-address-dns-name ${prefix}
# NSG に自分の IP アドレスから SSH 接続出来るようにします
az network nsg rule create \
--resource-group ${prefix}-rg \
--name Allow-SSH \
--nsg-name ${prefix}-vmNSG \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info) \
--destination-port-ranges 22 \
--access Allow \
--protocol Tcp
# 仮想マシンに SSH 接続します
ssh -i ${prefix} azureuser@${prefix}.$region.cloudapp.azure.com
# OS 情報を表示します
$ cat /etc/os-release
PRETTY_NAME="Ubuntu Jammy Jellyfish (development branch)"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
参考
作成したリソースを削除します。
bash
# リソースグループを削除します
az group delete \
--name ${prefix}-rg \
--yes
# 作成した SSH キーペアを削除します
rm -f ${prefix}*
# ダウンロードした Ubuntu を削除します
rm -f jammy-server-cloudimg-amd64-azure.vhd.zip livecd.ubuntu-cpc.azure.vhd
https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/create-upload-ubuntu
https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-cli