宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「AWSは使えるけど、Azureって何から始めればいいんだろう?」
クラウドを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特有の用語を素早くマッピングできる


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

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にはあります。
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にログインします。

# Azureログイン(ブラウザが開き認証する) az login

ブラウザでMicrosoftアカウントにサインインすると、ターミナルにサブスクリプション情報が表示されます。

実行結果の例:

[ { "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" ] }

AWSのVPCと同様に、--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

NSGをサブネットに関連付けることで、そのサブネット内のすべてのVMに同じセキュリティルールが適用されます。個別のVMにのみ適用したい場合はNICに関連付けます。

現場で通用する安全な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 で利用可能なサイズを確認するには次のコマンドを実行してください。

# 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% /

Standard_B1sサイズ(1 vCPU・1 GB RAM)の環境で動作していることが確認できました。

なお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

「VM stopped」ではなく「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.

このエラーは、サブスクリプションのvCPUクォータ上限に達した場合に発生します。

注意:無料試用版(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でポート22の受信ルールが設定されていない場合に発生します。

# 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がサブネットまたはNICに関連付けられていない場合も原因になります。

# サブネットの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

イメージ名は時期によって変わる場合があります。上記コマンドで最新のURNを確認してから--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 CLIを使ってVNet・NSG・azure vmを構築し、SSHでLinux仮想マシンへ接続するまでの基本的なワークフローを解説しました。AWSの経験がある方であれば、VPC→VNet、Security Group→NSG、EC2→azure vmという対応関係を意識するだけで、かなりスムーズに理解できたのではないでしょうか。

次のステップとしては、複数のサブネットを使ったネットワーク分離(フロントエンド・バックエンドの分離)や、Azure Load Balancerを使った冗長構成に挑戦してみてください。

Linuxサーバーの初期セキュリティ設定についてはLinux サーバーの SSH 設定も合わせて確認することをお勧めします。azure vmにSSHで接続した後、rootログイン禁止やポート変更といった設定を施しておくと実務運用の安全性が高まります。

Linux DNS 設定の基本
Linux ポート確認の全コマンド

Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。

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

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

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

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

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

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

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

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

この記事を書いた人

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

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

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