「ポータルのウィザードに頼らず、azコマンドで一から構築手順を理解したい」
「AWSのVPCやセキュリティグループとの違いも含めて整理したい」
Azureポータルの「仮想マシンを作成する」ウィザードを使えば数クリックでVMが起動しますが、裏側ではVNet・サブネット・NIC・NSGが自動生成されています。後から「どのリソースを変えればいい?」と迷う前に、構成要素を一つずつ手で作る経験が役に立ちます。
この記事では、Azure CLI(azコマンド)だけを使ってリソースグループの作成からVNet・サブネット・パブリックIP・NIC・NSGを順番に作成し、最後にLinux VMを起動してSSH接続するまでの実践手順を解説します。Azure CLI 2.61以上・AlmaLinux 9.4で動作確認済みです。
この記事のポイント
・VNetはAzure上のプライベートネットワーク基盤でVMより先に作成する
・az network vnet createでVNetとサブネットを一括で作れる
・NSGでSSH(22/tcp)のソースIPを自分のPCに絞るのが実務の基本
・本記事はAzure CLI 2.61以上・AlmaLinux 9.4で動作確認済み
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
AzureのVNetとVMの構成要素を整理する
まずは「VMを作るために必要なリソース」を俯瞰しておきます。Azureポータルのウィザードが自動で用意してくれる分、これを知らずに使い続けると後で困ります。・リソースグループ:Azureリソースをまとめるフォルダのようなもの。VNetもVMも同じRGに入れると管理しやすい
・VNet(仮想ネットワーク):Azure上のプライベートIPアドレス空間。例:10.0.0.0/16
・サブネット:VNetをさらに分割した小さなIPレンジ。例:10.0.1.0/24
・NSG(ネットワークセキュリティグループ):インバウンド・アウトバウンドのポートフィルタリングルール
・パブリックIP:インターネット側からVMにアクセスするためのグローバルIPアドレス
・NIC(ネットワークインターフェースカード):VMとネットワークをつなぐ仮想NIC
これらを順番に作り、最後にVMを作成してNICを紐付ける流れになります。AWSを使い慣れた方向けに対応を整理すると次のとおりです。
・VNet ≒ VPC:Azure上のプライベートIPアドレス空間
・NSG ≒ セキュリティグループ:ポートフィルタリングルール(ただしNICへのアタッチ方式が異なる。後述)
・NIC ≒ ENI(Elastic Network Interface):VMとは独立したリソースとして事前に作成する
特に注意したいのがNICの扱いです。AWSのEC2ではセキュリティグループをインスタンスに直接紐付けますが、AzureではNICをVMとは別の独立したリソースとして定義してからアタッチする設計になっています。一見冗長に見えますが、後から別のVMにNICを付け替えたり複数NICを追加したりする際に柔軟に対応できる利点があります。
実行環境と前提条件
本記事のコマンドは以下の環境で動作確認しています。・Azure CLI:2.61.0(az --version で確認)
・実行環境:Ubuntu 24.04 LTS(ローカルPC)
・作成するVM OS:AlmaLinux 9.4
・サブスクリプション:有効なAzureサブスクリプションが必要
Azure CLIがインストールされていない場合は、Microsoftの公式ドキュメントに従ってインストールしてください。インストール後は必ず
az login で認証を済ませてから作業を始めます。# Azure CLIのバージョン確認 az --version # Azureにログイン(ブラウザが開き認証画面が表示される) az login
azコマンドでVNetとLinux VMを構築する
1. リソースグループを作成する
まずすべてのリソースを格納するリソースグループを作成します。リージョンはジャパンイースト(japaneast)を指定します。az group create --name myRG --location japaneast
"provisioningState": "Succeeded" になっていれば作成完了です。{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myRG", "location": "japaneast", "name": "myRG", "properties": { "provisioningState": "Succeeded" }, "type": "Microsoft.Resources/resourceGroups" }
2. VNetとサブネットを作成する
次にVNet(10.0.0.0/16)とその中のサブネット(10.0.1.0/24)を一度のコマンドで作成します。az network vnet create --resource-group myRG --name myVNet --address-prefix 10.0.0.0/16 --subnet-name mySubnet --subnet-prefix 10.0.1.0/24
--subnet-name と --subnet-prefix を一緒に指定することで、VNetとサブネットを同時に作成できます。後からサブネットを追加したい場合は az network vnet subnet create を使います。作成確認は以下のコマンドで行います。
az network vnet show --resource-group myRG --name myVNet --query "{name:name, addressSpace:addressSpace, subnets:subnets[].name}" --output json # 出力例 { "addressSpace": { "addressPrefixes": ["10.0.0.0/16"] }, "name": "myVNet", "subnets": ["mySubnet"] }
3. パブリックIPアドレスを確保する
インターネットからVMにSSH接続するためのパブリックIPを作成します。--sku Standard を指定してStandard SKUにします(Basic SKUは廃止予定のため)。az network public-ip create --resource-group myRG --name myPublicIP --sku Standard --allocation-method Static
--allocation-method Static で固定IPを割り当てます。Dynamic(動的)にするとVM再起動のたびにIPが変わるため、検証目的でも Static を推奨します。4. NSGを作成してSSHの受信ルールを追加する
NSG(ネットワークセキュリティグループ)を作成し、ポート22(SSH)のインバウンド通信を許可します。# NSGを作成 az network nsg create --resource-group myRG --name myNSG # SSH(ポート22)のインバウンドルールを追加 az network nsg rule create --resource-group myRG --nsg-name myNSG --name AllowSSH --protocol tcp --priority 1000 --destination-port-range 22 --access Allow --direction Inbound
上記の例では
--source-address-prefix を省略しているため、インターネット全体からのSSH接続を許可している状態です。実務では自分のPCのグローバルIPアドレスをソースに指定してアクセス元を絞るのが基本です。# ソースIPを自分のPCのグローバルIPに制限する例(実務での推奨) # x.x.x.x には自分のグローバルIPアドレスを入れる az network nsg rule create --resource-group myRG --nsg-name myNSG --name AllowSSHFromMyPC --protocol tcp --priority 1000 --destination-port-range 22 --source-address-prefix x.x.x.x/32 --access Allow --direction Inbound
5. NICを作成してVNetとNSGを紐付ける
NICは「VMとネットワークをつなぐ橋渡し」です。AWSのEC2と異なり、AzureではNICをVMとは独立したリソースとして事前に作成してからアタッチします。ここでVNet・サブネット・パブリックIP・NSGをまとめて紐付けます。az network nic create --resource-group myRG --name myNIC --vnet-name myVNet --subnet mySubnet --public-ip-address myPublicIP --network-security-group myNSG
6. Linux VMを作成してSSHで接続する
いよいよVM本体を作成します。--nics で先ほど作ったNICを指定します。az vm create --resource-group myRG --name myLinuxVM --image almalinux:almalinux:9-gen2:latest --size Standard_B2s --nics myNIC --admin-username azureuser --generate-ssh-keys
--generate-ssh-keys を指定すると、~/.ssh/id_rsa と ~/.ssh/id_rsa.pub が自動生成され、公開鍵がVMに登録されます。VM作成が完了すると次のような出力が返ります。
{ "fqdns": "", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myLinuxVM", "location": "japaneast", "macAddress": "00-0D-3A-xx-xx-xx", "powerState": "VM running", "privateIpAddress": "10.0.1.4", "publicIpAddress": "20.xx.xx.xxx", "resourceGroup": "myRG", "zones": "" }
"powerState": "VM running" と publicIpAddress が表示されていれば起動成功です。パブリックIPを使ってSSH接続を確認します。# publicIpAddressの値に置き換えてください ssh azureuser@20.xx.xx.xxx # 接続確認:VMのホスト名とOSバージョンを確認 [azureuser@myLinuxVM ~]$ hostname myLinuxVM [azureuser@myLinuxVM ~]$ cat /etc/os-release NAME="AlmaLinux" VERSION="9.4 (Seafoam Ocelot)" ID="almalinux"
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。
VM作成後に確認しておきたい基本操作
構築後に覚えておくと便利なazコマンドを紹介します。# VMを停止(割り当て解除) # deallocateにすると計算リソースが解放されコストが止まる az vm deallocate --resource-group myRG --name myLinuxVM # VMを起動 az vm start --resource-group myRG --name myLinuxVM # VMの状態確認 az vm show --resource-group myRG --name myLinuxVM --show-details --query "{name:name, state:powerState, ip:publicIps}" --output table
az vm deallocate と az vm stop は似ていますが、stop では仮想マシンはシャットダウンされてもAzureの計算リソースは確保されたまま(課金継続)になる場合があります。コストを抑えるには必ず deallocate を使ってください。作業が終わったらリソースグループごと削除するとクリーンに片付けられます。
# リソースグループごと削除(VMもVNetもNICも全部消える) az group delete --name myRG --yes --no-wait
--no-wait を付けると削除完了を待たずにコマンドが返ります。本番環境でこのコマンドを使う際は二重に確認してください。よくあるエラーと対処法
1. SSH接続が「Connection timed out」になる
NSGのインバウンドルールでSSH(ポート22)が許可されていない可能性があります。以下のコマンドでNSGルールを確認してください。az network nsg rule list --resource-group myRG --nsg-name myNSG --output table Priority Name Port Protocol Access Direction ---------- ---------- ------ ---------- -------- ----------- 1000 AllowSSH 22 Tcp Allow Inbound
AllowSSH の行がない場合は、手順4のNSGルール追加コマンドを再度実行してください。ソースIPアドレスを絞って設定した場合は、自分のPCの現在のグローバルIPアドレスがルールのソースIPと一致しているかも確認します。LinuxサーバーのSSHポート確認についてはLinux ポート確認の全コマンドも参考にしてください。2. az vm create が「ResourceNotFound」エラーになる
NICやパブリックIPがまだ作成されていないか、リソースグループ名が間違っている可能性があります。# リソースグループ内のリソース一覧を確認 az resource list --resource-group myRG --output table Name ResourceType Location ------------ ----------------------------------------------- ---------- myVNet Microsoft.Network/virtualNetworks japaneast myPublicIP Microsoft.Network/publicIPAddresses japaneast myNSG Microsoft.Network/networkSecurityGroups japaneast myNIC Microsoft.Network/networkInterfaces japaneast
3. SSH鍵が別のPCから使えない
--generate-ssh-keys で作成されたSSH秘密鍵は ~/.ssh/id_rsa に保存されています。別のPCからSSH接続したい場合は、その秘密鍵をコピーするか、--ssh-key-values オプションで公開鍵を明示的に指定してVMを作成し直してください。複数のPCから接続する運用を想定している場合は、VM作成時に
--generate-ssh-keys を使わず、あらかじめ用意した公開鍵を明示的に指定する方が鍵の管理がシンプルになります。# 既存の公開鍵を明示的に指定してVMを作成する例 az vm create --resource-group myRG --name myLinuxVM --image almalinux:almalinux:9-gen2:latest --size Standard_B2s --nics myNIC --admin-username azureuser --ssh-key-values ~/.ssh/id_ed25519.pub
本記事のまとめ
AzureのVNetとLinux VMをazコマンドで構築する基本手順を解説しました。| やりたいこと | azコマンド |
|---|---|
| リソースグループを作る | az group create --name myRG --location japaneast |
| VNetとサブネットを作る | az network vnet create --name myVNet --subnet-name mySubnet |
| パブリックIPを確保する | az network public-ip create --name myPublicIP --sku Standard |
| NSGを作りSSHルールを追加する | az network nsg rule create --destination-port-range 22 |
| NICを作りネットワークを紐付ける | az network nic create --name myNIC --vnet-name myVNet |
| Linux VMを作成する | az vm create --name myLinuxVM --nics myNIC |
| VMを停止(割り当て解除)する | az vm deallocate --name myLinuxVM |
| リソース全体を削除する | az group delete --name myRG --yes |
Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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