「VMは動いているのに、ゾーン障害のたびにダウンする。何か設計が間違っているのか…」
こういった事態を防ぐのが Availability Zone(可用性ゾーン)です。AzureのVMをゾーン1・2・3の独立したデータセンターに分散配置することで、単一DC障害がサービス全体に波及するのを防ぎ、SLA 99.99% の可用性を実現できます。
この記事では、Availability Zone の仕組みから、az vm create の --zone オプションを使ったゾーン分散VM配置の実践手順、Availability Set との違い、トラブルシュートまで、実機ログを交えて解説します。動作確認環境は RHEL 9.4 / Ubuntu 22.04 LTS です。
この記事のポイント
・az vm create --zone で特定ゾーンにVMを配置し、SLA 99.99% を実現できる
・Zone 1~3 は同一リージョン内の独立した物理データセンターを指す
・ゾーン対応には Standard SKU の NIC・パブリックIP が必須(Basic SKU は不可)
・Availability Set との違いは冗長化の範囲(ゾーン分散 vs 同DC内ラック分散)
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
AzureのAvailability Zoneとは(SLA 99.99%の仕組み)
Availability Zone(可用性ゾーン)は、同一 Azure リージョン内に存在する、物理的に独立したデータセンター群です。現在、東日本リージョン(japaneast)はゾーン1・2・3の3ゾーンをサポートしています。各ゾーンの特徴は次のとおりです。
・独立した電源・冷却・ネットワーク:ゾーンごとに独立したインフラを持つため、1つのゾーンで障害が発生しても他のゾーンは影響を受けない
・ゾーン間遅延 2ms 未満:ゾーン間は高速専用ファイバーで接続されており、レイテンシは 2ms 未満を保証
・SLA 99.99%:2台以上のVMを別々のゾーンに配置することで、月間ダウンタイムを 4.38 分以内に抑えるSLAが適用される
単一VMだとSLA 99.9%、同一 Availability Set 内2VMだと 99.95% ですが、別ゾーンに分散した2VMで 99.99% に跳ね上がります。本番サービスで「ゾーン冗長」が標準になっているのはこの理由です。
| 構成 | SLA | 月間最大ダウンタイム |
|---|---|---|
| 単一VM(Premium SSD) | 99.9% | 約 43.8 分 |
| 同一Availability Set内 2VM | 99.95% | 約 21.9 分 |
| 別Availability Zoneの 2VM | 99.99% | 約 4.38 分 |
ゾーン対応リソースの確認
Availability Zone を使うには、対象リージョンとVMサイズがゾーンをサポートしている必要があります。まず確認コマンドを実行します。1. ゾーン対応VMサイズを確認する
# ログイン az login # 東日本リージョンでゾーン対応の Standard_D2s_v3 を確認 az vm list-skus --location japaneast --zone true --query "[?name=='Standard_D2s_v3'].[name,locationInfo[0].zones]" --output table # 出力例(ゾーン対応の場合) Name Zones ---------------- -------- Standard_D2s_v3 [1, 2, 3]
2. リソースグループを作成する
# リソースグループを作成 az group create --name rg-az-demo --location japaneast # 出力例 { "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-az-demo", "location": "japaneast", "name": "rg-az-demo", "properties": { "provisioningState": "Succeeded" } }
ゾーンを指定してLinux VMを作成する
ここでは2台のVMをそれぞれゾーン1・ゾーン2に分散配置します。ゾーン対応VMの作成には Standard SKU のパブリックIP が必要です(Basic SKU はゾーン非対応)。1. VNetとサブネットを作成する
# VNetを作成(/16 アドレス空間) az network vnet create --resource-group rg-az-demo --name vnet-az-demo --address-prefix 10.0.0.0/16 --subnet-name subnet-main --subnet-prefix 10.0.1.0/24 # 出力例(抜粋) { "newVNet": { "addressSpace": {"addressPrefixes": ["10.0.0.0/16"]}, "name": "vnet-az-demo", "provisioningState": "Succeeded" } }
2. ゾーン1にVM-1を作成する
# ゾーン1にVM作成(--zone 1 を指定) az vm create --resource-group rg-az-demo --name vm-zone1 --image Ubuntu2204 --zone 1 --size Standard_D2s_v3 --vnet-name vnet-az-demo --subnet subnet-main --admin-username azureuser --generate-ssh-keys --public-ip-sku Standard # 出力例 { "fqdns": "", "id": "/subscriptions/xxx/resourceGroups/rg-az-demo/providers/Microsoft.Compute/virtualMachines/vm-zone1", "publicIpAddress": "20.xxx.xxx.10", "resourceGroup": "rg-az-demo", "zones": "1" }
3. ゾーン2にVM-2を作成する
# ゾーン2にVM作成(--zone 2 を指定) az vm create --resource-group rg-az-demo --name vm-zone2 --image Ubuntu2204 --zone 2 --size Standard_D2s_v3 --vnet-name vnet-az-demo --subnet subnet-main --admin-username azureuser --generate-ssh-keys --public-ip-sku Standard # 出力例 { "publicIpAddress": "20.xxx.xxx.11", "resourceGroup": "rg-az-demo", "zones": "2" }
4. ゾーン割り当てを確認する
# vm-zone1 のゾーン確認 az vm show --resource-group rg-az-demo --name vm-zone1 --query "{name:name, zones:zones, location:location}" --output table # 出力例 Name Zones Location -------- ------- ---------- vm-zone1 1 japaneast # vm-zone2 のゾーン確認 az vm show --resource-group rg-az-demo --name vm-zone2 --query "{name:name, zones:zones, location:location}" --output table # 出力例 Name Zones Location -------- ------- ---------- vm-zone2 2 japaneast
2台のVMをゾーン1・ゾーン2に分散配置することで、ゾーン障害時のサービス継続を準備できます。Azureクラウド上でのLinuxサーバー設計・構築スキルを体系的に習得したい方はこちらもご覧ください。
Azure対応セミナーの詳細を見る >>
Availability ZoneとAvailability Setの違いと使い分け
「Availability Zone と Availability Set の違いがよく分からない」という声をよく聞きます。どちらも冗長化のための機能ですが、分散の粒度が異なります。| 項目 | Availability Zone | Availability Set |
|---|---|---|
| 分散単位 | ゾーン(独立したDC) | 障害ドメイン・更新ドメイン(同DC内) |
| SLA | 99.99%(2VM以上) | 99.95%(2VM以上) |
| 対応SKU | Standard必須 | Basic・Standard両対応 |
| ゾーン対応リージョン | 東日本・西日本等(要確認) | すべてのリージョン |
| 主なユースケース | 本番サービスの高可用性 | ゾーン未対応リージョンの冗長化 |
ゾーン対応リージョン(東日本など)では Availability Zone を優先してください。ゾーン未対応リージョンやレガシー構成が残る場合のみ Availability Set を選択します。
なお、VMSSを使った自動スケールと組み合わせた高可用性構成については「AzureのVMSSとLoad Balancerで高可用性を実現する方法」も参考にしてください。
トラブルシュート
1. 「The requested VM size is not available in the current region/zone」エラーが出る場合
指定したVMサイズが、そのゾーンで利用できない場合に発生します。# エラー例 (SkuNotAvailable) The requested VM size Standard_D2s_v3 is not available in the current region/zone. # 対処: そのゾーンで使えるSKUを確認する az vm list-skus --location japaneast --zone true --query "[].{Name:name, Zones:locationInfo[0].zones}" --output table | head -30
2. 「Basic SKU のパブリックIPはゾーン指定と互換性がない」エラーが出る場合
--public-ip-sku を省略または Basic にした場合に発生します。# エラー例 (PublicIpSkuMismatch) The public IP address associated with the NIC has a different SKU than the load balancer. # 対処: Standard SKU を明示する az vm create --zone 1 --public-ip-sku Standard \ # これを必ず追加 ...
3. az vm create 後に zones フィールドが空の場合
--zone を指定しても zones が空になることがあります。多くの場合、Azure Portal や az vm show でのクエリパス指定ミスが原因です。# zones が正しく取得できるコマンド az vm show --resource-group rg-az-demo --name vm-zone1 --query "zones" --output tsv # 出力例(正常) 1
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| ゾーン対応VMサイズを確認する | az vm list-skus --location japaneast --zone true --query "[?name=='Standard_D2s_v3']" |
| ゾーン1にVMを作成する | az vm create --zone 1 --public-ip-sku Standard --size Standard_D2s_v3 ... |
| ゾーン2にVMを作成する | az vm create --zone 2 --public-ip-sku Standard --size Standard_D2s_v3 ... |
| VMのゾーン割り当てを確認する | az vm show --resource-group <RG> --name <VM名> --query zones |
| ゾーン対応SKUを絞り込む | az vm list-skus --location japaneast --zone true --output table |
Azure対応セミナーの詳細を見る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:AzureのVPN GatewayでオンプレミスLinuxサーバーとVNetをIPsecで接続する方法|サイト間VPN設定の実践手順
- この記事の属するカテゴリ:Azureへ戻る

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