クラウドを使っていても、物理データセンター単位の障害は発生します。Azureの可用性ゾーン(Availability Zone)を活用したゾーン冗長構成を組んでいなければ、単一ゾーンの障害がシステム全体のダウンにつながるリスクがあります。
この記事では、東日本リージョン(Japan East)を想定環境として、Azure CLIで可用性ゾーン1・2・3に分散したVMを作成し、ゾーン冗長Standard Load Balancerで負荷分散するハンズオン手順を解説します。
この記事のポイント
・az vm create の --zone で可用性ゾーン1・2・3に分散配置できる
・ゾーン冗長にはBasicではなくStandard SKUのLoad Balancerが必須
・パブリックIPもゾーン冗長(--zone 1 2 3)に設定することが鍵
・BasicとStandard SKUの混在はエラーになるので構成前に必ず確認する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Azureゾーン冗長(Zone Redundancy)とは何か
Azureの可用性ゾーン(Availability Zone)は、同一リージョン内に物理的に分離された3つのデータセンターゾーンです。電源・冷却設備・ネットワークが独立しており、一つのゾーンで障害が発生しても、他のゾーンで処理を継続できます。「ゾーン冗長」と「ゾーン分散」は区別して理解してください。
・ゾーン冗長(Zone-Redundant):単一リソースが複数ゾーンにまたがる構成。Standard Load BalancerのパブリックIPに --zone 1 2 3 を指定する場合がこれにあたります。
・ゾーン分散(Zone-Pinned):複数のリソースを異なるゾーンに配置する構成。VMをゾーン1・2・3にそれぞれ1台ずつ作成するケースです。
本記事では、VMをゾーン分散で配置し、フロントのLoad Balancerをゾーン冗長化する組み合わせを実装します。この構成のSLAは99.99%です(VM単体の99.9%と比較して大幅に向上します)。
構成概要
本ハンズオンで構築するアーキテクチャは以下の通りです。・リソースグループ: rg-zone-demo
・リージョン: Japan East(東日本)
・VNet: 10.0.0.0/16
・サブネット: 10.0.1.0/24
・パブリックIP: Standard SKU・ゾーン冗長(zone 1 2 3)
・Load Balancer: Standard SKU
・VM: Ubuntu 22.04 LTS × 3台(Zone 1 / Zone 2 / Zone 3)
VMにはパブリックIPを付けず、Load Balancer経由でHTTPアクセスを受け付ける構成にします。
事前準備(Azure CLIの確認)
Azure CLIのバージョンと、ログイン状態を確認しておきます。# バージョン確認 az version # ログイン状態の確認 az account show --query "{サブスクリプション:name, テナント:tenantId}" -o table
{ "azure-cli": "2.65.0", ... } サブスクリプション テナント ----------------- ------------------------------------ My Azure Sub xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
az login を実行してください。次に、使用予定のリージョンでゾーンが利用可能かを確認します。
az vm list-skus \ --location japaneast \ --size Standard_B1s \ --query "[].locationInfo[0].zones" \ -o tsv
1 2 3
ゾーン冗長VMとLoad Balancerの構築手順
1. リソースグループとVNetの作成
まずリソースグループを作成します。az group create \ --name rg-zone-demo \ --location japaneast
az network vnet create \ --resource-group rg-zone-demo \ --name vnet-zone-demo \ --address-prefix 10.0.0.0/16 \ --subnet-name snet-web \ --subnet-prefix 10.0.1.0/24
# NSGの作成 az network nsg create \ --resource-group rg-zone-demo \ --name nsg-web # HTTP許可ルール az network nsg rule create \ --resource-group rg-zone-demo \ --nsg-name nsg-web \ --name allow-http \ --priority 100 \ --protocol Tcp \ --destination-port-range 80 \ --access Allow
2. ゾーン冗長パブリックIPとStandard Load Balancerの作成
ここが本記事の核心です。パブリックIPとLoad Balancerの両方をStandard SKUで作成し、パブリックIPには --zone 1 2 3 を指定してゾーン冗長化します。# ゾーン冗長パブリックIPの作成(Standard SKU + --zone 1 2 3) az network public-ip create \ --resource-group rg-zone-demo \ --name pip-lb-zone \ --sku Standard \ --zone 1 2 3
# Standard Load Balancerの作成 az network lb create \ --resource-group rg-zone-demo \ --name lb-zone-demo \ --sku Standard \ --public-ip-address pip-lb-zone \ --frontend-ip-name fe-config \ --backend-pool-name be-pool
3. ヘルスプローブとロードバランシングルールの設定
VMが正常に応答しているかを確認するヘルスプローブと、どのポートをどのVMへ転送するかを定義するロードバランシングルールを設定します。# ヘルスプローブの作成(TCP 80番で死活監視) az network lb probe create \ --resource-group rg-zone-demo \ --lb-name lb-zone-demo \ --name hp-http \ --protocol Tcp \ --port 80 # ロードバランシングルールの作成(外部80 → バックエンド80) az network lb rule create \ --resource-group rg-zone-demo \ --lb-name lb-zone-demo \ --name lr-http \ --protocol Tcp \ --frontend-port 80 \ --backend-port 80 \ --frontend-ip-name fe-config \ --backend-pool-name be-pool \ --probe-name hp-http
4. 可用性ゾーンを指定してVMを作成する
VMを3台、ゾーン1・2・3にそれぞれ1台ずつ作成します。--zone オプションでゾーン番号を指定するのがポイントです。# Zone 1 のVM az vm create \ --resource-group rg-zone-demo \ --name vm-zone1 \ --image Ubuntu2204 \ --zone 1 \ --size Standard_B1s \ --vnet-name vnet-zone-demo \ --subnet snet-web \ --nsg nsg-web \ --public-ip-address "" \ --admin-username azureuser \ --generate-ssh-keys # Zone 2 のVM az vm create \ --resource-group rg-zone-demo \ --name vm-zone2 \ --image Ubuntu2204 \ --zone 2 \ --size Standard_B1s \ --vnet-name vnet-zone-demo \ --subnet snet-web \ --nsg nsg-web \ --public-ip-address "" \ --admin-username azureuser \ --generate-ssh-keys # Zone 3 のVM az vm create \ --resource-group rg-zone-demo \ --name vm-zone3 \ --image Ubuntu2204 \ --zone 3 \ --size Standard_B1s \ --vnet-name vnet-zone-demo \ --subnet snet-web \ --nsg nsg-web \ --public-ip-address "" \ --admin-username azureuser \ --generate-ssh-keys
--public-ip-address "" でパブリックIPを付けず、Load Balancer経由でのみアクセスを受け付ける構成にしています。3台の作成が完了したら、ゾーン割り当てを確認します。
az vm list \ --resource-group rg-zone-demo \ --query "[].{VM:name, Zone:zones}" \ -o table
VM Zone -------- ------ vm-zone1 ['1'] vm-zone2 ['2'] vm-zone3 ['3']
5. VMのNICをバックエンドプールに追加する
作成したVMをLoad Balancerのバックエンドプールに追加します。VMのNIC名を取得してから、プールへの追加を実行します。# vm-zone1 のNIC名を取得 NIC1=$(az vm nic list \ --resource-group rg-zone-demo \ --vm-name vm-zone1 \ --query "[0].id" -o tsv | awk -F/ '{print $NF}') # vm-zone1 をバックエンドプールへ追加 az network nic ip-config address-pool add \ --resource-group rg-zone-demo \ --nic-name $NIC1 \ --ip-config-name ipconfig1 \ --lb-name lb-zone-demo \ --address-pool be-pool # vm-zone2、vm-zone3 も同様に NIC 名を取得してから追加する
az network lb address-pool show \ --resource-group rg-zone-demo \ --lb-name lb-zone-demo \ --name be-pool \ --query "backendIpConfigurations[].id" \ -o table
実運用Tips(可用性セット・VMSS・ゾーン冗長の使い分け)
Azureには似たような高可用性機能が複数あるため、整理しておきます。・可用性セット(Availability Set):同一データセンター内で障害ドメインと更新ドメインを分散する。可用性ゾーン非対応リージョン向けの旧来の方法。SLAは99.95%。
・可用性ゾーン(Availability Zone):物理的に分離されたゾーン間でVMを分散する。99.99% SLA。本記事の構成。現在の推奨方法。
・VMSS(Virtual Machine Scale Set):VMを自動スケールする仕組み。ゾーン分散と組み合わせることも可能。可用性ゾーンと直交する概念なので併用できます。
本番ワークロードで高可用性を確保するなら、可用性ゾーン+Standard Load Balancerの組み合わせが現在の標準的な選択です。AzureのLinuxサーバー構築を体系的に学びたい方は Azure実践ハンズオン講座 もご覧ください。
よくあるエラーと対処法
「ResourceSkuNotAvailable」が出る場合
指定したVMサイズ(例: Standard_B1s)が、指定したゾーンで利用できない場合に発生します。# 利用可能なVMサイズをゾーン付きで一覧表示 az vm list-skus \ --location japaneast \ --resource-type virtualMachines \ --query "[?locationInfo[0].zones != null].{name:name, zones:locationInfo[0].zones}" \ -o table | grep B1s
「BasicLoadBalancerNotSupportedForAvailabilityZone」が出る場合
Basic SKUのLoad BalancerでゾーンピンのVMを追加しようとすると発生します。Load BalancerをStandard SKUで作り直す必要があります。# Load Balancer の SKU を確認する az network lb show \ --resource-group rg-zone-demo \ --name lb-zone-demo \ --query "sku.name" -o tsv
「PublicIPAddressCannotBeAssociatedWithLoadBalancerOfDifferentSku」が出る場合
パブリックIPとLoad BalancerのSKUが混在しています(例: Standard IP + Basic LB)。両方を同じSKUに統一してください。# パブリックIPのSKUを確認する az network public-ip show \ --resource-group rg-zone-demo \ --name pip-lb-zone \ --query "sku.name" -o tsv
本記事のまとめ
AzureでゾーンリダンダントなVMとLoad Balancerを構築する主要コマンドをまとめます。| やりたいこと | コマンド |
|---|---|
| リソースグループを作成する | az group create --name 名前 --location japaneast |
| ゾーン冗長パブリックIPを作成する | az network public-ip create --sku Standard --zone 1 2 3 |
| Standard Load Balancerを作成する | az network lb create --sku Standard |
| ヘルスプローブを作成する | az network lb probe create --protocol Tcp --port 80 |
| ゾーン指定でVMを作成する | az vm create --zone 1 |
| VMをバックエンドプールに追加する | az network nic ip-config address-pool add |
| VMのゾーン割り当てを確認する | az vm list --query "[].{VM:name, Zone:zones}" |
Azureを使ったLinuxサーバー構築を基礎から体系的に学べるAzure実践ハンズオン講座をご活用ください。可用性ゾーンを含むAzureインフラの設計・構築手順を丁寧に解説しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:LinuxサーバーDR訓練にAzureスナップショットを活用する|復元RTOをaz CLIで計測
- この記事の属するカテゴリ:Azureへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます