Azure 可用性ゾーン で 物理ゾーン と 論理ゾーン を確認する
可用性ゾーン の 物理ゾーン と 論理ゾーン
Japan East リージョンは可用性ゾーンがサポートされているリージョンです。
Japan East では、 3つの可用性ゾーン提供されており、それぞれのゾーンが、1 つまたは複数のデータセンターで構成されています。
2つの可用性ゾーンにまたがるようにシステムをデプロイしておけば、万が一、データセンターレベルの障害が発生してしまった場合でも、サービスの継続が可能になります。
可用性ゾーンには、実は、物理ゾーン と 論理ゾーン という概念があります。
イメージとしては、以下のような感じです。
Azure の Japan East リージョンを構成する 東日本(東京、埼玉)にある各データセンターは、3つの物理ゾーンのいずれかに属しています。
一方の論理ゾーンは、各サブスクリプションから指定できる 3つのゾーン であり、各論理ゾーン が 各物理ゾーン にマップされています。
公式ドキュメント Azure リージョンと可用性ゾーンとは にも、以下のように記載されています。
==== 引用 ======
各データセンターは、物理ゾーンに割り当てられています。
物理ゾーンは、Azure サブスクリプションの論理ゾーンにマップされています。
Azure サブスクリプションには、サブスクリプションの作成時に、このマッピングが自動的に割り当てられます。
checkZonePeers と呼ばれる専用の ARM API を使用して、複数のサブスクリプションにまたがる回復性のあるソリューションのゾーン マッピングを比較できます。
===== 終 ======
Azure Portal から確認したり、各種デプロイ時指定できる可用性ゾーンは、論理ゾーンの方です。
ここで少し注意となるのは、このマッピングは、実は、サブスクリプションによって異なる場合があるということです。
サブスクリプションA では、論理ゾーン1 が 物理ゾーン1 とマップされていても、サブスクリプションB では 論理ゾーン1 は 物理ゾーン2 とマップされていたりする、というような感じです。
これは例えば、異なるサブスクリプションで、レイテンシを考慮して物理的に近接してリソースをデプロイしたいといった場合に、注意すべき点となります。
物理ゾーン と 論理ゾーン の対応を確認する
2 つの API について紹介します。
API | 概要 |
---|---|
listLocations | ある 1つの サブスクリプション の 物理ゾーン と 論理ゾーン の対応を確認する |
checkZonePeers | 複数の サブスクリプション の 論理ゾーン 同士の対応を確認する |
listLocations API : ある 1つの サブスクリプション での 物理ゾーン と 論理ゾーン の対応を確認する
あるサブスクリプションでの 物理ゾーン と 論理ゾーン の対応を確認するには、Azure 可用性ゾーンの移行ベースラインで紹介されている、REST API listLocations を利用します。
Azure CLI での利用例は以下の通りです。
#Parameter Setting
subscriptionId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# 物理ゾーンと論理ゾーンの対応一覧を取得し、 Japan のゾーンマッピング のみに絞って表示
az rest --method get --url "https://management.azure.com/subscriptions/${subscriptionId}/locations?api-version=2022-12-01"| grep Zone |grep japan -B 1
[ ~ ]$ #Parameter Setting
subscriptionId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
[ ~ ]$
[ ~ ]$ # 物理ゾーンと論理ゾーンの対応一覧を取得し、 Japan のゾーンマッピング のみに絞って表示
az rest --method get --url "https://management.azure.com/subscriptions/${subscriptionId}/locations?api-version=2022-12-01"| grep Zone |grep japan -B 1
"logicalZone": "1",
"physicalZone": "japaneast-az2"
"logicalZone": "2",
"physicalZone": "japaneast-az3"
"logicalZone": "3",
"physicalZone": "japaneast-az1"
checkZonePeers API : 複数の サブスクリプション の 論理ゾーン 同士の対応を確認する
複数のサブスクリプションの論理ゾーン同士の対応を確認したい場合には、REST API checkZonePeers が利用できます。
例えば以下のように利用することができ、subscriptionId1
で指定したサブスクリプションでの各論理ゾーンが、subscriptionId2
ではどの論理ゾーンとなっているかが確認できます。
#Parameter Setting
subscriptionId1="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
subscriptionId2="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
# subscriptionId1 と subscriptionId2 の論理ゾーン同士の対応を確認する
az rest --method post --url "https://management.azure.com/subscriptions/${subscriptionId1}/providers/Microsoft.Resources/checkZonePeers/?api-version=2022-12-01" --body @- << EOF
{
"location":"japaneast",
"subscriptionIds":[
"subscriptions/${subscriptionId2}",
]
}
EOF
実行した結果は以下のように表示されます。
{
"availabilityZonePeers": [
{
"availabilityZone": "1",
"peers": [
{
"availabilityZone": "2",
"subscriptionId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
}
]
},
{
"availabilityZone": "2",
"peers": [
{
"availabilityZone": "1",
"subscriptionId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
}
]
},
{
"availabilityZone": "3",
"peers": [
{
"availabilityZone": "3",
"subscriptionId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
}
]
}
],
"location": "japaneast",
"subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
例えば、以下の箇所から、subscriptionId1 "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" の論理ゾーン1 は、subscriptionId2 "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" では論理ゾーン2 となっている、ということを示しています。
{
"availabilityZonePeers": [
{
"availabilityZone": "1",
"peers": [
{
"availabilityZone": "2",
"subscriptionId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
}
]
},
... 略 ...
"location": "japaneast",
"subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
自分のサブスクリプションが、どのSKU を どの論理ゾーン でデプロイできるのか?
サブスクリプションによっては、リージョンまたは可用性ゾーンで、一部 SKU を使用できない場合があります。
ドキュメント SKU 利用不可エラーを解決する にも記載されていますが、要求されたサイズが場所またはゾーンで使用できないというエラー メッセージが表示される場合があります。
Azure Portal でデプロイしようとすると以下のようなエラーが表示されたり、Bicep や コマンド を利用しての作成を試みた場合にもドキュメント記載のエラーが表示されたりします。
例えば仮想マシンであれば、以下のようなコマンド で、サブスクリプションで使用可能な SKU を確認することができます。
デプロイしようとしているシリーズが決まっている場合には、以下のような形で確認することができます。
# 確認したい SKU が決まっていれば、こっちのが見やすい
az vm list-skus --location japaneast --size Standard_D --zone --output table
az vm list-skus --location japaneast --size Standard_D --zone --output table
ResourceType Locations Name Zones Restrictions
--------------- ----------- ------------------- ------- --------------
virtualMachines japaneast Standard_D11_v2 1,2,3 None
virtualMachines japaneast Standard_D12_v2 1,2,3 None
virtualMachines japaneast Standard_D13_v2 1,2,3 None
virtualMachines japaneast Standard_D14_v2 1,2,3 None
virtualMachines japaneast Standard_D16ads_v5 2,3 None
virtualMachines japaneast Standard_D16as_v4 1,2,3 None
virtualMachines japaneast Standard_D16as_v5 2,3 None
量は膨大にはなりますが、すべての SKU を確認したい場合には、以下のような形で確認することができます。
# 可用性ゾーンをサポートする japaneast リージョンで使用可能なすべての VM サイズを一覧表示します。
# --location : リージョンを指定
# --resource-type : リソースの種類 ("virtualmachines"、"disks"など)。
# --zone : 可用性ゾーンをサポートする SKU を表示します。
# --all : 現在のサブスクリプションでは使用できない VM サイズを含むすべての情報を表示します。
az vm list-skus --location japaneast --resource-type virtualmachines --zone --all --output table
まとめ
可用性ゾーンには、物理ゾーンと論理ゾーンの概念があります。
REST API listLocations や、REST API checkZonePeers を利用することで、マッピングを確認できます。
API | 概要 |
---|---|
listLocations | ある 1つの サブスクリプション の 物理ゾーン と 論理ゾーン の対応を確認する |
checkZonePeers | 複数の サブスクリプション の 論理ゾーン 同士の対応を確認する |
可用性ゾーンを利用しつつ、レイテンシも考慮する必要があるなどには、可用性ゾーンとリージョンを使用するための推奨事項 に記載されているような、特定ゾーンを指定してのデプロイが必要な場合もあります。
異なるサブスクリプションでは、可用性ゾーンの物理ゾーンと論理ゾーンのマッピングが異なっている可能性もありますので、確認してみてください。
Discussion