Azure の学習や検証で仮想マシンを作成しようとしたときに、突然 SkuNotAvailable エラーが出て演習が先に進まなくなる……という経験は少なくありません。特に MS Learn のハンズオンでは、テンプレートのサイズやリージョンが固定されていることも多く、原因が分かりにくくなりがちです。この記事では、「Standard_DS1_v2 が eastus で容量制限により利用不可」といったエラーを例に、Azure CLI を使って根本原因を切り分け、実際にデプロイを成功させるまでの具体的な対処手順を詳しく解説します。
Azure VM 作成エラー「SkuNotAvailable」とは
まずは問題となっているエラーの正体を整理します。Azure で仮想マシンを作成する際、インフラ側の理由で指定した VM サイズ(SKU)が利用できない場合、Azure リソースマネージャーから SkuNotAvailable エラーが返されます。
典型的なエラーメッセージ例
SkuNotAvailable: The requested size for resource 'vm1' is currently not available in location 'eastus' for subscription '<サブスクリプションID>'.
The supported sizes are: ...
MS Learn の演習でよく見られるパターンは、次のような内容です。
SkuNotAvailable: Standard_DS1_v2 が eastus で容量制限により利用不可- サイズを
Standard_DS2_v2などに変更しても同様に失敗する
ここで重要なのは、「サイズそのものが存在しない」わけではなく、次のいずれかの条件を満たせずにエラーになっていることが多い、という点です。
- 指定したリージョンでその SKU が提供されていない
- リージョンやゾーンの在庫(キャパシティ)が足りない
- サブスクリプション側のクォータ(vCPU 制限)やポリシーでブロックされている
MS Learn の演習環境では、さらに次の要素も絡みやすくなります。
- テンプレートが特定サイズ(例:
Standard_DS1_v2)や特定ゾーン(例:"zones": ["1"])に固定されている - 演習用サブスクリプションのクォータが非常に小さい
原因の整理:なぜ Standard_DS1_v2 が eastus で作れないのか
同じテンプレートでも、ある環境では成功し、別の環境では SkuNotAvailable になることがあります。その背景には、次のような複数の要因が絡み合っています。
主な原因パターン
| 原因カテゴリ | 具体例 | チェック方法 |
|---|---|---|
| リージョンの提供状況 | Standard_DS1_v2 が eastus では新規提供終了・一部ゾーンのみ提供 | az vm list-skus で対象リージョンの SKU を確認 |
| リージョンのキャパシティ不足 | 特定サイズが一時的な在庫切れ(人気サイズで起こりやすい) | 別リージョンで同じ SKU を試す・サポートに問い合わせ |
| ゾーンとの組み合わせ | ゾーン 1 にその SKU が存在しない/在庫不足 | az vm list-skus の Zones 列を確認 |
| クォータ制限 | Dsv2 系の vCPU クォータが上限に達している | ポータルの「使用量 + 制限 (クォータ)」を確認 |
| Azure Policy | 企業ポリシーで使えるリージョンや SKU が制限されている | ポータルでポリシー割り当てを確認、または管理者に相談 |
MS Learn のような演習環境の場合、サブスクリプションのクォータは非常に低めに設定されており、また利用者が多く集中する時間帯には、一部の古い SKU や人気の SKU が一時的に在庫不足になることもあります。そのため、「テンプレート通りに実行しているのに、たまたま自分だけ失敗する」という現象が発生しがちです。
Azure CLI で使える VM サイズ(SKU)を確認する
SkuNotAvailable エラーが発生したら、まずは「そのリージョンで何が使えるのか」を事実ベースで確認するのが近道です。Azure CLI の az vm list-skus コマンドを使うと、SKU ごとの制限状況を細かく確認できます。
ステップ1:リージョンの一覧を確認する
そもそもどのリージョンが利用可能か分からない場合は、次のコマンドで確認できます。
az account list-locations -o table
ここで表示される Name(例:eastus, eastus2)が、CLI の --location に指定する値になります。
ステップ2:簡易的に利用可能な VM サイズを確認する
特定リージョンで利用可能なサイズのざっくりした一覧を見たい場合は、次のコマンドが便利です。
az vm list-sizes --location eastus -o table
このコマンドは「サイズ名」「vCPU 数」「メモリ量」などを一覧表示しますが、サブスクリプションのクォータやポリシーによる制限までは分かりません。より詳しく確認するには、次の az vm list-skus を利用します。
ステップ3:SKU ごとの制限やゾーン対応を詳しく確認する
特定のシリーズ(ここでは D 系)に絞って、eastus の SKU 状況を確認する例です。
az vm list-skus \
--location eastus \
--size Standard_D \
--output table
ポイントは次のとおりです。
--size Standard_D:Standard_D*で始まる SKU に絞り込みます。--output table:見やすい表形式で出力します。Restrictions列:ここがNoneの SKU が「現サブスクリプションで実際に利用可能」な候補になります。
az vm list-skus には --all オプションもありますが、これは「サブスクリプションで使えない SKU も含めてすべて表示」してしまうため、サイズ選定の段階では付けないほうが無難です。
主な CLI オプションと意味
| オプション | 意味 | 利用タイミング |
|---|---|---|
--location | 対象リージョンを指定する(例:eastus) | 必須。エラーが出ているリージョンを指定 |
--size | サイズ名のプレフィックスでフィルタ(例:Standard_D) | シリーズごとに候補を絞りたいとき |
--all | サブスクリプションで使えないものも含めて全件表示 | 「そもそも SKU が存在するか」を確認したいとき |
-o table | 表形式で表示 | 人間が目視で確認するときに便利 |
Restrictions 列の読み方
az vm list-skus の結果には、SKU ごとに Restrictions 列が表示されます。ここでチェックすべきポイントは次のとおりです。
None:サブスクリプションレベルでの制限はなく、利用候補になります。NotAvailableForSubscription等の値:企業ポリシー、クォータ、リージョンの制限など何らかの理由で、その SKU が現サブスクリプションでは利用できません。
まずは 「Restrictions = None」かつ目的に合うスペックの SKU を複数ピックアップしておき、テンプレートのサイズをその中から選ぶのが効率的です。
MS Learn 演習テンプレートのサイズを変更して再デプロイする
MS Learn の演習では、仮想マシンのサイズがテンプレート内のパラメータとして定義されているケースがほとんどです。内部的には ARM テンプレートや Bicep ファイルで、次のような形でパラメータ化されています。
"parameters": {
"virtualMachineSize": {
"type": "string",
"defaultValue": "Standard_DS1_v2"
}
}
この場合、デプロイ実行時にパラメータを上書きするだけで、テンプレート本体を編集せずにサイズ変更が可能です。
ARM テンプレートをパラメータ上書きで実行する例
az deployment group create \
-g <rg-name> \
-f main.json \
-p virtualMachineSize=Standard_D2s_v5
Bicep ファイルの場合も同様に、-p でパラメータ値を上書きできます。
az deployment group create \
-g <rg-name> \
-f main.bicep \
-p virtualMachineSize=Standard_D2s_v5
ここで指定する Standard_D2s_v5 などのサイズは、先ほどの az vm list-skus で Restrictions = None になっている SKU の中から選びましょう。
サイズ変更時の具体的な検討ポイント
- 演習目的が OS の基本操作や Azure ポータルの操作であれば、B シリーズ(例:
Standard_B2s) でも十分なことが多い - SQL Server や Web サーバーの検証など、ある程度の性能が必要なら、Dsv5 シリーズ から選ぶ
- 古い世代(v2, v3 など)は在庫や今後の提供状況が不安定になりやすいため、できるだけ現行世代(v5 など) を選ぶ
MS Learn のテンプレートによっては、サイズを変更すると後続の演習手順とスクリーンショットが完全には一致しない場合がありますが、「リソースが作成されること」自体が重要であれば、多くの場合支障なく続行できます。
リージョンを変更してエラーを回避する
サイズを変えても同じエラーになる場合は、リージョン側の容量不足や、リージョン単位の制限が疑われます。その場合は、リージョンを変更して同じサイズを試す のが有効です。
別リージョンで SKU を確認する
例えば、eastus でダメだった場合、隣接する eastus2 で確認してみます。
az vm list-skus --location eastus2 --size Standard_D --output table
ここで Restrictions=None の SKU が見つかれば、次のように VM 作成コマンドを実行してみます。
az vm create \
-g <rg-name> -n <vm-name> \
--image UbuntuLTS \
--size Standard_D2s_v5 \
--location eastus2
企業環境の場合は、リージョンにも Azure Policy による制限がかかっていることがあるため、管理者が推奨するリージョン(例:japaneast, japanwest など)を優先的に試しましょう。
リージョン変更時の注意点
- 同じリージョンに存在するリソース(VNet, Storage など)とのネットワークレイテンシや料金に影響する場合があります。
- MS Learn の一部演習では「特定リージョンを前提」としているケースもあるため、指示に従う必要があるかどうかを確認してください。
- 実務では「同じ地理(例:East US, Japan)」の中で別リージョンに切り替えるのが一般的です。
可用性ゾーン指定があるテンプレートの落とし穴
テンプレートの中に次のような記述がある場合、サイズ × ゾーンの組み合わせが原因でエラーとなることがあります。
"zones": [ "1" ]
Azure では、SKU によって利用できる可用性ゾーンが異なります。az vm list-skus の結果に Zones 列があり、例えば ["2", "3"] のように表示されている場合、その SKU はゾーン 2 と 3 でのみ利用可能という意味になります。
このとき、テンプレート側で zones: ["1"] と指定されていると、ゾーン 1 ではそもそもそのサイズが存在しない ため、SkuNotAvailable となります。
ゾーンが原因かどうかを切り分ける方法
- テンプレートから
zonesの指定を一時的に削除する(演習のルール上許される場合) - または、
az vm list-skusのZones列に表示されているゾーン番号に合わせてzonesを変更する
| テンプレートの設定 | 起こりうる問題 | 対応方針 |
|---|---|---|
"zones": ["1"] | SKU がゾーン 2,3 のみに対応している | "zones": ["2"] などに変更、またはゾーン指定を外す |
| ゾーン指定なし | 特定ゾーンに偏らないため在庫不足を回避しやすい | 特に理由がなければゾーン指定なしで検証する |
サブスクリプションのクォータ・ポリシーを確認する
リージョンやゾーンを変えても同様のエラーが続く場合、サブスクリプション側の制限が原因である可能性が高くなります。
vCPU クォータを確認する
Azure では、サブスクリプションごとに「vCPU クォータ」が設定されており、シリーズごと(D 系、B 系など)に上限が決まっています。ポータルから次のように確認できます。
- ポータルで対象サブスクリプションを開く
- 「使用量 + 制限 (クォータ)」 を選択
- コンピューティングの項目から、該当リージョン・シリーズの vCPU 使用量と上限を確認
上限値にすでに達している場合、同じシリーズの追加 VM を作ろうとすると、SkuNotAvailable に類似したエラーになることがあります。実務環境であれば、サポートリクエストを送信し、クォータの引き上げを申請できます。
一方、MS Learn の演習用サブスクリプションではクォータは固定であり、利用者側から変更することはできません。そのため、クォータが逼迫していると分かったら、シリーズを変えるかリージョンを変える のが現実的な対処法となります。
Azure Policy による制限
企業テナントでは、セキュリティやコスト管理の観点から Azure Policy が設定されていることが多く、次のような制限がかかることがあります。
- 利用可能なリージョンを限定する(例:
japaneastのみ) - 利用可能な VM サイズを限定する(例:B 系のみ許可)
このようなポリシーがある場合、「スクリプトは正しいのに、特定の SKU だけ何度やっても失敗する」という現象につながります。管理者に相談し、どのサイズ・リージョンが許可されているかを確認したうえで、テンプレート側のデフォルト値を見直しましょう。
効率的なトラブルシューティング手順(優先度付き)
実務でも演習でも使える、SkuNotAvailable エラーのおすすめ対処フローをまとめます。
- エラーメッセージをよく読む
どのサイズ(SKU)、どのリージョン、どのリソース名で失敗しているかを特定します。 az vm list-skusで利用可能なサイズを確認
エラーが出ているリージョンを指定し、D 系や B 系などの汎用 SKU を中心にRestrictions=Noneのものを一覧します。- テンプレートのサイズを変更して再デプロイ
ARM/Bicep テンプレートの場合は、パラメータvirtualMachineSizeを安全な SKU に差し替えます。 - リージョンを変更
同じサイズが別リージョン(eastus2,centralus,japaneastなど)で利用可能かを確認し、テンプレートや CLI の--locationを変更します。 - ゾーン指定を見直す
テンプレートにzonesが指定されている場合は、一度ゾーン指定を外すか、SKU のZones列と整合するように修正します。 - クォータ・ポリシーを確認
ポータルでクォータを確認し、必要に応じて引き上げを申請します。企業環境では Azure Policy の制限も確認します。
この順番で対処すれば、原因がどこにあるのかを体系的に切り分けることができます。「サイズ変更+リージョン変更+ゾーン未指定」を試してもなお解決しない場合は、サポートに問い合わせるべきケースと考えてよいでしょう。
コマンド早見表:Azure CLI での確認・作成
ここまでに登場したコマンドを、用途別にまとめておきます。
| やりたいこと | CLI コマンド例 | 補足 |
|---|---|---|
| 利用可能なリージョンを確認 | az account list-locations -o table | Name 列が CLI で指定するリージョン名 |
| リージョン内の VM サイズを簡易確認 | az vm list-sizes --location eastus -o table | スペックの目安をつかむのに便利 |
| SKU 単位で制限を詳しく確認 | az vm list-skus --location eastus --size Standard_D --output table | Restrictions=None の SKU を選ぶ |
| VM サイズをパラメータで上書き | az deployment group create \ -g <rg> \ -f main.bicep \ -p virtualMachineSize=Standard_B2s | テンプレート本体を編集せずにサイズ変更可能 |
| Azure CLI から VM を直接作成 | az vm create \ -g <rg> -n <vm> \ --image UbuntuLTS \ --size Standard_B2s \ --location eastus2 | リージョンやサイズを手動で切り替えながら検証するときに便利 |
実務・学習で役立つベストプラクティス
最後に、SkuNotAvailable エラーを最小限に抑え、起きたとしても素早く対処するためのベストプラクティスをまとめます。
在庫が厚い現行世代の SKU から選ぶ
- 汎用用途なら Dsv5 シリーズ、コスト重視なら B シリーズ を優先的に検討します。
- 古い世代(v2, v3)や特殊な SKU は、在庫が少なかったり、今後提供が縮小される可能性があるため、最初の選択肢にはしないほうが無難です。
テンプレートのパラメータ化を徹底する
- VM サイズ、リージョン、ゾーンはすべてパラメータとして外出しし、あとから変更しやすくしておきます。
- 「標準構成」としてよく使う SKU を複数パターン用意し(例:
Standard_B2s,Standard_D2s_v5など)、クォータ不足や在庫不足時に切り替えられるようにしておきます。
リージョン変更とゾーン未指定をセットで試す
- 何度も同じエラーが出る場合は、別リージョン+ゾーン未指定 の組み合わせを一度試してみると、原因の切り分けがしやすくなります。
- ゾーンを指定する必要がある本番構成であっても、まずはゾーン未指定で VM を立ててから、ゾーン指定構成への移行を検討するという進め方も有効です。
クォータの監視と事前申請
- 本番環境や大規模検証では、事前にクォータを確認し、「この構成なら何台まで増やせるか」を把握しておきます。
- リリース直前にクォータ不足で VM が作成できない、という事態を避けるため、余裕を持ってクォータ引き上げを申請しておくことが重要です。
MS Learn 演習での割り切りポイント
- 演習の主目的が「概念の理解」や「操作手順の習得」であれば、テンプレート通りのサイズやリージョンにこだわりすぎないほうが学習はスムーズです。
- どうしてもテンプレートの制約で先に進まない場合は、別のリージョン・別のサイズを使って同様の構成を自力で再現してみる、というのも良いトレーニングになります。
まとめ:SkuNotAvailable は怖くない
SkuNotAvailable エラーは、一見すると Azure 側の難しい内部問題のように見えますが、実際には「リージョン」「サイズ(SKU)」「ゾーン」「クォータ」「ポリシー」という限られた要素の組み合わせが原因です。Azure CLI の az vm list-skus を使って事実ベースで状況を確認し、テンプレートのパラメータを柔軟に切り替えられるようにしておけば、多くのケースで数分〜十数分の範囲で解決できます。
特に、MS Learn のような学習環境でつまずいた場合は、
- D/B シリーズなど現行の汎用 SKU を選ぶ
- 別リージョンを試す
- ゾーン指定を外す
といったシンプルな対処から始めてみてください。エラーの裏側にある仕組みを理解しておくことで、「なぜこうなるのか」を説明できるエンジニアに一歩近づくことができます。

コメント