AzureでEC2相当のVMを作る手順|AWS経験者向けハンズオン

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Azure > AzureでEC2相当のVMを作る手順|AWS経験者向けハンズオン
「AWSのEC2は使えるのに、AzureでVMを作ろうとしたら概念が違いすぎて手が止まった」
AWS経験者からよく聞かれる悩みだ。AzureのVirtual Machine(VM)はEC2と同じ仮想マシンだが、リソースの名前・作成手順・必須の前提条件が異なるため、最初の一歩でつまずきやすい。

この記事では、AWS EC2の経験者を対象に、AzureでEC2相当のLinux VMを作成する手順を実践形式で解説する。概念の対応表・az CLIコマンド・実機の出力例まで網羅し、30分以内でSSH接続まで完了できる構成にした。

この記事のポイント

・Azure VMはEC2相当だが、リソースグループが必須の管理単位となる
・az vm createコマンド1本でVMを起動しSSH接続まで完了できる
・VMを「停止」するだけでは課金が続く。「割り当て解除」が正しい停止方法
・削除は関連リソースごとリソースグループ削除が確実


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

AzureのVMとEC2の対応関係

AWSとAzureは同じクラウドだが、リソースの名称と構造が異なる。まず対応関係を把握しておくと、Azureの操作に迷いが減る。
AWS(EC2) Azure(VM) 役割
AWSアカウント サブスクリプション 課金・管理の単位
(相当概念なし) リソースグループ 関連リソースをまとめる論理コンテナ
VPC VNet(仮想ネットワーク) プライベートネットワーク空間
サブネット サブネット VNet内の分割されたネットワーク
セキュリティグループ NSG(ネットワークセキュリティグループ) インバウンド/アウトバウンドのポート制御
AMI イメージ(Marketplace) OSテンプレート
インスタンスタイプ(t3.micro等) VMサイズ(Standard_B1s等) CPU・メモリの仕様
EBS Managed Disk ブロックストレージ
Elastic IP パブリックIPアドレス(静的SKU) 固定パブリックIP
IAMロール Managed Identity VMへのAzureリソースアクセス権限
AWSと最も違うのがリソースグループの存在だ。AzureではVMだけでなく、VNet・NSG・パブリックIPなどあらゆるリソースがリソースグループに属する必要がある。EC2では意識しなかったこの概念が、Azureの操作で最初に混乱するポイントになりやすい。

Azure VMを作成するための準備

EC2はVPCとセキュリティグループを指定すれば起動できるが、AzureではVMを作る前に以下の順序でリソースを用意する必要がある。 ・リソースグループ → VNet → サブネット → (NSG)→ VM
ただし az vm create には一部のリソースを自動生成するオプションがある。本記事では「リソースを明示的に作るステップ」と「az vm createで一括作成するショートカット」の両方を紹介する。

1. Azure CLIのインストールとログイン

Ubuntu/Debianの場合はaptでインストールできる。

# Ubuntu / Debian の場合 curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash # インストール確認 $ az --version azure-cli 2.64.0

インストール後、Microsoftアカウントでログインする。az login を実行するとブラウザが開く。

$ az login A web browser has been opened at https://login.microsoftonline.com/... [ { "cloudName": "AzureCloud", "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "isDefault": true, "name": "MySubscription", "state": "Enabled", "tenantId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy", "user": { "name": "user@example.com", "type": "user" } } ]

複数サブスクリプションがある場合は az account set --subscription "サブスクリプションID" で対象を切り替える。

2. リソースグループを作成する

リソースグループはAWSにはない概念だ。「このプロジェクトで使うリソースをまとめるフォルダ」と考えると分かりやすい。

$ az group create --name rg-myserver --location japaneast { "id": "/subscriptions/xxxxxxxx.../resourceGroups/rg-myserver", "location": "japaneast", "name": "rg-myserver", "properties": { "provisioningState": "Succeeded" }, "type": "Microsoft.Resources/resourceGroups" }

--location japaneast は東日本リージョンの指定だ。AWSの ap-northeast-1(東京)に相当する。利用可能なリージョン一覧は az account list-locations -o table で確認できる。

3. VNetとサブネットを作成する

# VNet を作成する(AWSのVPC相当) $ az network vnet create --resource-group rg-myserver --name vnet-myserver --address-prefix 10.0.0.0/16 --subnet-name subnet-default --subnet-prefix 10.0.0.0/24 { "newVNet": { "addressSpace": { "addressPrefixes": ["10.0.0.0/16"] }, "location": "japaneast", "name": "vnet-myserver", "provisioningState": "Succeeded", "subnets": [ { "addressPrefix": "10.0.0.0/24", "name": "subnet-default", "provisioningState": "Succeeded" } ] } }

AWSのVPCと同様、CIDRは後から変更しにくいので余裕を持った /16 で作るのが無難だ。

az vm createでLinux VMを起動する

VNetとサブネットが用意できたら、az vm create でVMを作成する。NSGは az vm create が自動的に作成してくれる。

1. VMを作成する

$ az vm create --resource-group rg-myserver --name vm-web01 --image Ubuntu2204 --size Standard_B1s --admin-username azureuser --generate-ssh-keys --vnet-name vnet-myserver --subnet subnet-default

各オプションの意味を整理しておく。

・--image:OSイメージの指定。Ubuntu2204 はUbuntu 22.04 LTS。利用可能なイメージ一覧は az vm image list -o table --all --publisher Canonical で確認できる
・--size:VMサイズ。Standard_B1s はvCPU 1・メモリ1GBでEC2の t3.micro に近い最小構成
・--generate-ssh-keys:SSH鍵ペアを自動生成して ~/.ssh/ に保存する。EC2のキーペアと同じ概念
・--vnet-name / --subnet:手順2で作成したVNet・サブネットを指定する

コマンド実行後、1~3分待つと以下のJSONが返ってくる。

{ "fqdns": "", "id": "/subscriptions/xxxxxxxx.../virtualMachines/vm-web01", "location": "japaneast", "macAddress": "00-22-48-1A-2B-3C", "powerState": "VM running", "privateIpAddress": "10.0.0.4", "publicIpAddress": "20.89.xxx.xxx", "resourceGroup": "rg-myserver", "zones": "" }

powerState: VM running が表示されれば起動成功だ。publicIpAddress のIPアドレスをメモしておく。

2. NSGのSSHルールを送信元IPで絞り込む

az vm create は既定でSSH(ポート22)をインターネット全体に公開するNSGルールを自動作成する。検証目的以外では、自分のPCのIPアドレスだけに制限するとよい。

# 自分のPCのIPアドレスのみ許可に変更 $ az network nsg rule update --resource-group rg-myserver --nsg-name vm-web01NSG --name SSH --source-address-prefixes "203.0.xxx.xxx/32"

3. SSH接続を確認する

$ ssh azureuser@20.89.xxx.xxx Warning: Permanently added '20.89.xxx.xxx' (ED25519) to the list of known hosts. Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 6.2.0-1019-azure x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro azureuser@vm-web01:~$ uname -r 6.2.0-1019-azure azureuser@vm-web01:~$ df -h / Filesystem Size Used Avail Use% Mounted on /dev/sda1 29G 2.9G 26G 11% /

EC2ではデフォルトユーザーが ec2-user(Amazon Linux)または ubuntu(Ubuntu AMI)だが、Azure VMは --admin-username で指定した名前になる。本手順では azureuser だ。接続時に混乱しやすいポイントなので注意したい。

EC2との違いでつまずきやすい注意点

AWS経験者がAzure VMに移行するときに遭遇しやすい差異をまとめる。 ① VMの停止と課金の関係
EC2を停止(stopped)してもEBSの課金は続くが、インスタンス料金は止まる。AzureでもVMを「停止」するだけでは課金が続く場合がある。料金を止めるには「割り当て解除(deallocate)」が必要だ。

# 課金を止めるには deallocate(割り当て解除)を使う $ az vm deallocate --resource-group rg-myserver --name vm-web01 # 単純な停止(課金が継続する場合あり。検証環境では非推奨) # az vm stop --resource-group rg-myserver --name vm-web01 # 状態を確認する $ az vm show --resource-group rg-myserver --name vm-web01 --show-details --query "{powerState:powerState}" -o table PowerState ----------- VM deallocated

② パブリックIPはVMとは別リソース
AzureのパブリックIPはVMとは独立したリソースとして作成される。VMを削除してもパブリックIPリソースは残り続け、課金が発生し続ける。削除漏れを防ぐには、リソースグループごと削除するのが確実だ。

③ NSGはNICとサブネットの両方に関連付けられる
AWSのセキュリティグループはインスタンスに直接関連付けるが、AzureのNSGはVMのNIC(ネットワークインターフェース)またはサブネット単位に関連付ける設計だ。az vm create が自動作成するNSGはNICに関連付けられる。

④ WebサーバーのポートはNSGで手動追加が必要
EC2と同様、NSGに許可ルールがなければ外部からの通信はすべてブロックされる。Webサーバーを立てるときはNSGに80番・443番のインバウンドルールを手動で追加する必要がある。

# HTTP (80) と HTTPS (443) を許可するNSGルールを追加 $ az network nsg rule create --resource-group rg-myserver --nsg-name vm-web01NSG --name allow-http --protocol tcp --priority 1010 --destination-port-ranges 80 443 --access allow

NSGルール追加後、VM内からポートが実際にLISTENしているかを確認するには Linux ポート確認の全コマンド が参考になる。

不要リソースを削除する

検証後にリソースを削除するときは、リソースグループごと削除するのが確実だ。VMだけ削除してもNSG・VNet・パブリックIPが残り続ける。

# リソースグループごと削除(関連リソースをまとめて削除) $ az group delete --name rg-myserver --yes --no-wait # 削除状況の確認(残っていれば一覧に表示される) $ az group list -o table Name Location Status ------ ---------- --------- (表示なし = 削除完了)

本記事のまとめ

やりたいこと az CLIコマンド
リソースグループを作成する az group create --name RG名 --location japaneast
VNetとサブネットを作成する az network vnet create --resource-group RG名 --name VNet名 --address-prefix 10.0.0.0/16 --subnet-name サブネット名 --subnet-prefix 10.0.0.0/24
Linux VMを作成する az vm create --resource-group RG名 --name VM名 --image Ubuntu2204 --size Standard_B1s --admin-username azureuser --generate-ssh-keys --vnet-name VNet名 --subnet サブネット名
VMのIPアドレスを確認する az vm list-ip-addresses --resource-group RG名 --name VM名 -o table
VMを停止・割り当て解除する(課金停止) az vm deallocate --resource-group RG名 --name VM名
リソースグループごと削除する az group delete --name RG名 --yes --no-wait
Azure VMはEC2と同じ「仮想マシンを借りる」サービスだが、リソースグループ・VNet・NSGの管理方法がAWSとは設計思想が異なる。「リソースグループを最初に作る」「VMの停止は割り当て解除が正しい」「削除はリソースグループごとが確実」の3点を押さえれば、AWS経験者でもスムーズに使いこなせる。

AzureでのLinuxサーバー構築をより体系的に学びたい方には、Azure環境でのLinuxサーバー構築セミナーも参考にしてほしい。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、AzureでのLinuxサーバー構築セミナー詳細はこちら>>

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

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

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

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

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

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

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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

この記事を書いた人

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

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

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