クラウドを2つ目に学ぶとき、多くのエンジニアがこの壁にぶつかります。
AWSの用語やコンソール操作に慣れているほど、Azureの独自概念(VNet、NSG、リソースグループ)が余計に難解に感じられるものです。
この記事では、Azure VMとVNet(仮想ネットワーク)の基礎ハンズオンを解説します。AWSの経験がある方を前提に、対応概念の比較を交えながら、Azure CLIを使ったLinux仮想マシンの構築手順をステップバイステップで紹介します。
実行環境はUbuntu 24.04 LTS(azure vm作成時の既定イメージ)、Azure CLI 2.60以降で動作確認済みです。
この記事のポイント
・Azure VMはAWSのEC2相当。az vm createコマンド1行で作成できる
・VNetはAWSのVPCに対応。サブネット・NSGの概念もほぼ同じ
・Azure CLIによるLinux VM構築の手順をコマンド例付きで解説
・AWSユーザー向け対応表でAzure特有の用語を素早くマッピングできる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
AzureとAWSのネットワーク設計の違いを理解する
AWSの経験がある方にとって、Azureのネットワーク概念は「名前が違うだけで似ている」と感じる部分が多いはずです。まずは用語の対応関係を整理しましょう。| AWSの概念 | Azureの対応概念 | 補足 |
|---|---|---|
| VPC(Virtual Private Cloud) | VNet(Virtual Network) | プライベートネットワーク空間。CIDRブロックで範囲指定する点は同じ |
| Security Group | NSG(Network Security Group) | インバウンド/アウトバウンドのルールで通信を制御。AWSはポートベース、AzureはNSGルールに優先度番号がある |
| EC2インスタンス | Azure VM(Virtual Machine) | 仮想マシン本体。azure vm createで作成する |
| リージョン + AZ | リージョン + 可用性ゾーン | 概念はほぼ同じ。日本リージョンは Japan East / Japan West |
| サブネット | サブネット | 名称は同じ。VNet内で分割するCIDR範囲 |
| IAMロール | マネージドID / RBAC | ロールベースアクセス制御。今回は触れない |
| CloudFormation | Azure Resource Manager(ARM)/ Bicep | インフラのコード化。今回は触れない |
AWSではリソースはリージョン内に作成され、タグで管理しますが、Azureではすべてのリソースを「リソースグループ」という論理コンテナに所属させる必要があります。
VMもVNetもNSGも、同一のリソースグループに紐付けて管理するのが基本です。
今回のハンズオンでは、
rg-azure-handsonというリソースグループを作成し、その中にVNet・サブネット・NSG・azure vmをすべて格納する構成を取ります。VNet(仮想ネットワーク)とサブネットを作成する
まずAzure CLIをインストールしてログインします。Azure CLIはAWSのaws cliに相当するコマンドラインツールです。1. Azure CLIのインストールとログイン
自分のPCのターミナルで以下を実行してください。UbuntuやDebian系の場合は次のコマンドでインストールできます。# Azure CLIインストール(Ubuntu/Debian) curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash # インストール確認 az --version
# Azureログイン(ブラウザが開き認証する) az login
実行結果の例:
[ { "cloudName": "AzureCloud", "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "isDefault": true, "name": "Azure subscription 1", "state": "Enabled", "tenantId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy", "user": { "name": "your-email@example.com", "type": "user" } } ]
2. リソースグループを作成する
Azureのすべてのリソースはリソースグループに所属します。まずリソースグループを作成します。# リソースグループの作成 az group create --name rg-azure-handson --location japaneast # 作成確認 az group show --name rg-azure-handson --query "{Name:name, Location:location, State:properties.provisioningState}"
{ "Name": "rg-azure-handson", "Location": "japaneast", "State": "Succeeded" }
3. VNet(仮想ネットワーク)を作成する
VNetはAWSのVPCに相当するプライベートネットワーク空間です。az network vnet createコマンドで作成します。# VNet(仮想ネットワーク)の作成 az network vnet create --resource-group rg-azure-handson --name vnet-handson --address-prefix 10.0.0.0/16 --subnet-name subnet-default --subnet-prefix 10.0.1.0/24 # 作成確認 az network vnet show --resource-group rg-azure-handson --name vnet-handson --query "{Name:name, AddressSpace:addressSpace.addressPrefixes, Subnets:subnets[].name}"
{ "Name": "vnet-handson", "AddressSpace": [ "10.0.0.0/16" ], "Subnets": [ "subnet-default" ] }
--address-prefixでVNet全体のCIDRブロックを、--subnet-prefixでサブネットのCIDRを指定します。VNet全体で10.0.0.0/16、サブネットで10.0.1.0/24を割り当てました。なお、Linuxサーバー構築の観点からIPアドレス設計やネットワーク基礎を復習したい方はLinux DNS 設定の基本も参考にしてください。
NSG(ネットワークセキュリティグループ)でアクセス制御を設定する
NSGはAWSのSecurity Groupに相当するファイアウォールルールです。AWSとの主な違いはルールに優先度番号(Priority)が必要な点です。優先度は100~4096の数値で、小さい数値が先に評価されます。1. NSGを作成してSSHの受信ルールを追加する
# NSGの作成 az network nsg create --resource-group rg-azure-handson --name nsg-handson # SSHアクセス許可ルールの追加(ポート22を開放) az network nsg rule create --resource-group rg-azure-handson --nsg-name nsg-handson --name Allow-SSH --priority 1000 --protocol Tcp --destination-port-ranges 22 --access Allow --direction Inbound # NSGルール確認 az network nsg rule list --resource-group rg-azure-handson --nsg-name nsg-handson --output table
Name Protocol SourcePortRanges DestPortRanges Access Priority Direction ---------- ---------- ------------------ ---------------- -------- ---------- ----------- Allow-SSH Tcp * 22 Allow 1000 Inbound
2. NSGをサブネットに関連付ける
AWSではSecurity GroupをEC2インスタンス(またはENI)に直接アタッチしますが、AzureではNSGをサブネット単位またはNIC(ネットワークインターフェース)単位に適用できます。今回はサブネットに適用します。# NSGをサブネットに関連付け az network vnet subnet update --resource-group rg-azure-handson --vnet-name vnet-handson --name subnet-default --network-security-group nsg-handson # 関連付け確認 az network vnet subnet show --resource-group rg-azure-handson --vnet-name vnet-handson --name subnet-default --query "networkSecurityGroup.id" --output tsv
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。
Azure CLIでLinux仮想マシン(azure vm)を作成する
VNetとNSGの準備ができたので、いよいよazure vmを作成します。az vm createコマンド1行でLinux仮想マシンを起動できます。1. azure vmの作成コマンド
# azure vmの作成(Ubuntu 24.04 LTS) az vm create --resource-group rg-azure-handson --name vm-linux-01 --image Ubuntu2404 --size Standard_B1s --vnet-name vnet-handson --subnet subnet-default --nsg nsg-handson --admin-username azureuser --generate-ssh-keys --public-ip-sku Standard # 作成確認(パブリックIPアドレスを表示) az vm show --resource-group rg-azure-handson --name vm-linux-01 --show-details --query "{Name:name, State:powerState, PublicIP:publicIps, PrivateIP:privateIps}" --output table
・--image Ubuntu2404:Ubuntu 24.04 LTSを使用する(az vm image list --publisher Canonical で一覧確認可能)
・--size Standard_B1s:1 vCPU・1GB RAM の最小構成。ハンズオン目的なら十分
・--generate-ssh-keys:SSH鍵ペアを自動生成して ~/.ssh/ に保存する
・--admin-username azureuser:VMのログインユーザー名(rootは使えない)
・--public-ip-sku Standard:Standard SKUのパブリックIPを付与する
実行結果の例(完了まで2~3分かかります):
{ "fqdns": "", "id": "/subscriptions/xxxxxxxx/resourceGroups/rg-azure-handson/providers/Microsoft.Compute/virtualMachines/vm-linux-01", "location": "japaneast", "macAddress": "00-0D-3A-xx-xx-xx", "powerState": "VM running", "privateIpAddress": "10.0.1.4", "publicIpAddress": "20.xxx.xxx.xxx", "resourceGroup": "rg-azure-handson", "zones": "" }
publicIpAddressの値(上の例では20.xxx.xxx.xxx)がSSH接続先のIPアドレスです。この値をメモしておいてください。2. azure vmの仮想マシンサイズについて
AWSではインスタンスタイプ(t3.micro等)と呼びますが、Azureではサイズ(Standard_B1s等)と呼びます。主な対応表は以下のとおりです。| AWSインスタンスタイプ | Azureサイズ(相当品) | スペック概要 |
|---|---|---|
| t3.micro | Standard_B1s | 1 vCPU / 1 GB RAM |
| t3.small | Standard_B1ms | 1 vCPU / 2 GB RAM |
| t3.medium | Standard_B2s | 2 vCPU / 4 GB RAM |
| m5.large | Standard_D2s_v3 | 2 vCPU / 8 GB RAM |
# Japan Eastで利用可能なVMサイズ一覧 az vm list-sizes --location japaneast --output table | head -30
SSH接続でLinux VMへアクセスする
azure vmが起動したら、自分のPCのターミナルからSSH接続して動作確認を行います。1. SSH接続する
az vm createで--generate-ssh-keysを指定した場合、SSH秘密鍵は~/.ssh/id_rsaに保存されています。# SSH接続(publicIpAddressは実際のIPに置き換える) ssh azureuser@20.xxx.xxx.xxx # または明示的に秘密鍵を指定する場合 ssh -i ~/.ssh/id_rsa azureuser@20.xxx.xxx.xxx
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-1018-azure x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro azureuser@vm-linux-01:~$
vm-linux-01が表示されれば接続成功です。2. VMの状態を確認する
接続後、VMのOS・CPU・メモリ情報を確認しましょう。# OS情報確認 cat /etc/os-release | head -5 # CPU情報 nproc # メモリ情報 free -h # ディスク使用量 df -h /
PRETTY_NAME="Ubuntu 24.04.2 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04.2 LTS (Noble Numbat)" ID=ubuntu # nproc の出力 1 # free -h の出力 total used free shared buff/cache available Mem: 921Mi 283Mi 283Mi 1.7Mi 489Mi 637Mi Swap: 0B 0B 0B # df -h / の出力 Filesystem Size Used Avail Use% Mounted on /dev/sda1 29G 3.2G 26G 11% /
なおSSH接続の基礎やsshd_configの設定についてはsshd_config の設定詳細も参考にしてください。ポート変更やrootログイン禁止などのセキュリティ設定を解説しています。
3. ネットワーク接続を確認する
VNet内のプライベートIPが正しく割り当てられているか確認します。# IPアドレス確認 ip a show eth0 # デフォルトゲートウェイ確認 ip route show default # DNS確認 cat /etc/resolv.conf
2: eth0:
mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fexx:xxxx/64 scope link valid_lft forever preferred_lft forever # ip route default via 10.0.1.1 dev eth0 proto dhcp src 10.0.1.4 metric 100 # /etc/resolv.conf nameserver 168.63.129.16
10.0.1.4というIPが割り当てられており、VNet(10.0.0.0/16)のサブネット(10.0.1.0/24)内のアドレスになっています。DNS(168.63.129.16)はAzureの内部DNSサーバーです。Linuxのネットワーク診断コマンドについて詳しく知りたい方はLinux ポート確認の全コマンドも合わせてご覧ください。
Azure VMの停止・削除とリソース管理
azure vmを使い終わったら、適切に停止・削除してコストを抑えましょう。AWSとの重要な違いとして、AzureではVM停止(シャットダウン)だけではIPアドレス料金が発生し続ける場合があります。1. azure vmの停止と解放
# VMを停止する(「割り当て解除」状態にする) # 注意: --deallocate オプションを付けないとIPアドレスの課金が続く az vm deallocate --resource-group rg-azure-handson --name vm-linux-01 # 停止確認 az vm show --resource-group rg-azure-handson --name vm-linux-01 --query "powerState" --output tsv
VM deallocated
az vm stopコマンドはOS上でシャットダウンするだけで、課金は継続します。ハンズオン後は必ずaz vm deallocateを使いましょう。2. VMを再起動する
# 割り当て解除状態から起動する az vm start --resource-group rg-azure-handson --name vm-linux-01 # 実行中VMを再起動する場合 az vm restart --resource-group rg-azure-handson --name vm-linux-01
3. リソースグループごと削除する
ハンズオンが完了し、すべてのリソースを削除したい場合はリソースグループごと削除するのが最も簡単です。AWSでCloudFormationスタックを削除するのと同じ感覚です。# リソースグループ内のすべてのリソースを削除 # 注意: この操作は取り消せません。azure vm・VNet・NSGすべて削除されます az group delete --name rg-azure-handson --yes --no-wait # 削除状況の確認(しばらく後に実行) az group list --query "[?name=='rg-azure-handson'].name" --output tsv
--no-waitオプションを付けると削除処理をバックグラウンドで実行します。削除には数分かかります。よくあるエラーと対処法
Azure CLIでazure vmを構築する際に発生しやすいエラーと対処法をまとめます。1. 「QuotaExceeded」エラーが出る場合
# エラー例 (QuotaExceeded) Operation results in exceeding quota limits of Core.
注意:無料試用版(Free Trial)や従量課金の新規アカウントでは、リージョンごとにvCPUのデフォルト上限が4コアに設定されています。Standard_B1sは1コアなので通常は問題ありませんが、複数のVMを起動している場合に上限に達することがあります。
・対処1: 不要なVMを削除または割り当て解除してvCPUを空ける
・対処2: Azureポータルからクォータ引き上げリクエストを申請する
・対処3: 別のリージョン(japanwestなど)で作成する
2. SSH接続がタイムアウトする場合
# エラー例 ssh: connect to host 20.xxx.xxx.xxx port 22: Connection timed out
# NSGルールを確認する az network nsg rule list --resource-group rg-azure-handson --nsg-name nsg-handson --output table # ルールが存在しない場合は追加する az network nsg rule create --resource-group rg-azure-handson --nsg-name nsg-handson --name Allow-SSH --priority 1000 --protocol Tcp --destination-port-ranges 22 --access Allow --direction Inbound
# サブネットのNSG関連付けを確認する az network vnet subnet show --resource-group rg-azure-handson --vnet-name vnet-handson --name subnet-default --query "networkSecurityGroup.id"
3. 「az vm create」でイメージが見つからない場合
# 利用可能なUbuntuイメージを検索する az vm image list --publisher Canonical --offer ubuntu-24_04-lts --all --output table | head -10
--imageに指定してください。本記事のまとめ
今回のハンズオンで実施した内容と使用したコマンドをまとめます。| やりたいこと | コマンド |
|---|---|
| リソースグループを作成する | az group create --name RG名 --location japaneast |
| VNet(仮想ネットワーク)を作成する | az network vnet create --resource-group RG名 --name VNet名 --address-prefix CIDR |
| NSGを作成する | az network nsg create --resource-group RG名 --name NSG名 |
| NSGにルールを追加する | az network nsg rule create --nsg-name NSG名 --priority 番号 |
| azure vmを作成する | az vm create --resource-group RG名 --name VM名 --image Ubuntu2404 |
| azure vmのパブリックIPを確認する | az vm show --show-details --query publicIps |
| azure vmを割り当て解除(停止)する | az vm deallocate --resource-group RG名 --name VM名 |
| リソースグループごと削除する | az group delete --name RG名 --yes |
次のステップとしては、複数のサブネットを使ったネットワーク分離(フロントエンド・バックエンドの分離)や、Azure Load Balancerを使った冗長構成に挑戦してみてください。
Linuxサーバーの初期セキュリティ設定についてはLinux サーバーの SSH 設定も合わせて確認することをお勧めします。azure vmにSSHで接続した後、rootログイン禁止やポート変更といった設定を施しておくと実務運用の安全性が高まります。
・Linux DNS 設定の基本
・Linux ポート確認の全コマンド
Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:AzureとAWSの違いを比較|Linuxエンジニアがクラウド2つ目に学ぶ理由
- この記事の属するカテゴリ:Azureへ戻る

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