AzureのAvailability ZoneにLinux VMを分散配置する方法|az vm createのzoneオプションとゾーン冗長設計の実践

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Azure > AzureのAvailability ZoneにLinux VMを分散配置する方法|az vm createのzoneオプションとゾーン冗長設計の実践
「本番のLinuxサーバーをAzureに移行したら、データセンター障害でサービスが全停止してしまった…」
「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内ラック分散)


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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]

ゾーン列に [1, 2, 3] が表示されれば、そのVMサイズはゾーン対応です。ここに何も表示されない場合、そのサイズはゾーン指定不可です。

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" }

注意:--public-ip-sku Standard を忘れずに指定してください。省略するとデフォルトの Basic SKU が割り当てられ、ゾーン指定と競合してエラーになります。Basic SKU の NIC にゾーン指定のVMを接続しようとすると VM 作成時点でエラーが返されます。

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

zones 列に「1」「2」と表示されれば、それぞれのゾーンに正しく配置されています。SSH接続の確認については、Linux ポート確認の全コマンドも参考にしてください。

2台のVMをゾーン1・ゾーン2に分散配置することで、ゾーン障害時のサービス継続を準備できます。Azureクラウド上でのLinuxサーバー設計・構築スキルを体系的に習得したい方はこちらもご覧ください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
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

出力の Zones 列を確認し、目的のゾーン番号が含まれているSKUを選択してください。

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 の Availability Zone を活用すれば、単一データセンターの障害からサービスを守り、SLA 99.99% の可用性を実現できます。ゾーン冗長構成はAzure本番運用の必須知識です。クラウド上での Linux サーバー設計・構築スキルを体系的に習得したい方は、下記のセミナーも参考にしてください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
Azure対応セミナーの詳細を見る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。