両者は機能的に近く見えますが、構築コマンド・ネットワーク設計・課金の仕組みがそれぞれ異なります。「amazon azure」で検索するエンジニアの多くは、コストや構築手順を比べながら判断したいはずです。
この記事では、Azure VMとAmazon EC2をazコマンドとaws CLIで実際に構築しながら、コスト・性能・運用性の3軸で選定基準を整理します。Ubuntu 24.04 LTS / RHEL 9.4を対象に、実行結果付きで解説します。
この記事のポイント
・az vm createとaws ec2 run-instancesでそれぞれ5分以内にLinux VMを起動できる
・コスト比較ではスペック・予約プラン・既存資産によりAzure/AWSどちらが有利かが変わる
・VNetとVPCのサブネット設計の違いを把握するとトラブルが大幅に減る
・既存のMicrosoft/AWS資産とチームスキルが選択の最大の決め手になる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Azure VMとAmazon EC2の基本アーキテクチャ比較
両サービスの設計思想の違いを先に把握すると、後の手順が理解しやすくなります。| 比較項目 | Azure VM | Amazon EC2 |
|---|---|---|
| ネットワーク単位 | VNet(仮想ネットワーク) | VPC(Virtual Private Cloud) |
| サブネット設計 | VNet内に自由に配置(AZをまたげる) | サブネット=1つのAZ固定 |
| CLIツール | az(Azure CLI) | aws(AWS CLI) |
| 認証方式 | az login(Entra ID) | aws configure(アクセスキー) |
| リソース管理単位 | リソースグループ | リージョン + タグ |
| 無料枠(12ヶ月) | B1s(1vCPU/1GB)750時間 | t2.micro(1vCPU/1GB)750時間 |
Azure VMを構築する実践手順(azコマンド)
1. ログイン確認とリソースグループの作成
まずAzure CLIのバージョンとサブスクリプションの状態を確認します。# Azure CLIのバージョン確認 az --version # ログイン中のサブスクリプションを確認 az account show --query "{name:name,id:id}" -o table
Name Id --------------- ------------------------------------ My Azure Sub xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# リソースグループの作成 az group create --name rg-linux-lab --location japaneast
{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-linux-lab", "location": "japaneast", "name": "rg-linux-lab", "properties": { "provisioningState": "Succeeded" } }
2. Azure VMの作成(Ubuntu 24.04 LTS)
az vm create 1コマンドでVNet・サブネット・パブリックIPを自動生成しながらVMを起動できます。
# Standard_B2s(2vCPU・4GB RAM)でUbuntu 24.04 LTS VMを作成 az vm create --resource-group rg-linux-lab --name vm-ubuntu-01 --image Ubuntu2404 --size Standard_B2s --admin-username azureuser --generate-ssh-keys --location japaneast
{ "fqdns": "", "id": "/subscriptions/xxxxxxxx/resourceGroups/rg-linux-lab/providers/Microsoft.Compute/virtualMachines/vm-ubuntu-01", "location": "japaneast", "macAddress": "00-0D-3A-xx-xx-xx", "powerState": "VM running", "privateIpAddress": "10.0.0.4", "publicIpAddress": "20.xxx.xxx.xxx", "resourceGroup": "rg-linux-lab" }
# Azure VMへのSSH接続 ssh azureuser@20.xxx.xxx.xxx # 接続後:OSバージョン確認 cat /etc/os-release
NAME="Ubuntu" VERSION="24.04.1 LTS (Noble Numbat)" ID=ubuntu ID_LIKE=debian VERSION_ID="24.04" PRETTY_NAME="Ubuntu 24.04.1 LTS"
3. NSG(ネットワークセキュリティグループ)の確認
AzureのNSGはAWSのセキュリティグループに相当するファイアウォールです。# NSGインバウンドルールの一覧表示 az network nsg rule list --nsg-name vm-ubuntu-01NSG --resource-group rg-linux-lab --query "[].{Name:name,Priority:priority,Direction:direction,Port:destinationPortRange,Access:access}" --output table
Name Priority Direction Port Access ---------------- ---------- ----------- ------ -------- default-allow-ssh 1000 Inbound 22 Allow
--source-address-prefixes "自分のPCのIPアドレス/32" で絞るのが鉄則です。
Amazon EC2を構築する実践手順(aws CLIコマンド)
1. VPCとサブネットの確認
EC2ではVPCが前提です。まずデフォルトVPCの存在を確認します。# デフォルトVPCの確認(東京リージョン) aws ec2 describe-vpcs --filters "Name=isDefault,Values=true" --region ap-northeast-1 --query "Vpcs[0].{VpcId:VpcId,CIDR:CidrBlock}" --output table
----------------------------------------- | DescribeVpcs | +----------------+----------------------+ | CIDR | VpcId | +----------------+----------------------+ | 172.31.0.0/16 | vpc-0abc1234def5678 | +----------------+----------------------+
2. Amazon EC2インスタンスの作成(Ubuntu 24.04 LTS)
# Ubuntu 24.04 LTSの最新AMI IDを取得(Canonical公式・東京リージョン) AMI_ID=$(aws ec2 describe-images --owners 099720109477 --filters "Name=name,Values=ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*" "Name=state,Values=available" --region ap-northeast-1 --query "reverse(sort_by(Images,&CreationDate))[0].ImageId" --output text) echo "使用するAMI_ID: $AMI_ID"
使用するAMI_ID: ami-0d52744d6551d851e
# EC2インスタンスの起動(t3.medium: 2vCPU・4GB RAM) aws ec2 run-instances --image-id "$AMI_ID" --instance-type t3.medium --key-name my-key-pair --region ap-northeast-1 --count 1 --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=ec2-ubuntu-01}]' --query "Instances[0].{InstanceId:InstanceId,State:State.Name,Type:InstanceType}" --output table
-------------------------------------------------- | RunInstances | +---------------------+----------+--------------+ | InstanceId | State | Type | +---------------------+----------+--------------+ | i-0abcd1234ef5678 | pending | t3.medium | +---------------------+----------+--------------+
3. 起動待機とSSH接続
# インスタンスの起動を待機(running状態になるまでブロック) aws ec2 wait instance-running --instance-ids i-0abcd1234ef5678 --region ap-northeast-1 # パブリックIPの取得 EC2_IP=$(aws ec2 describe-instances --instance-ids i-0abcd1234ef5678 --region ap-northeast-1 --query "Reservations[0].Instances[0].PublicIpAddress" --output text) echo "EC2 IP: $EC2_IP" # SSH接続 ssh -i my-key-pair.pem ubuntu@$EC2_IP
EC2 IP: 13.xxx.xxx.xxx Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-1015-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro Last login: Wed Oct 15 09:32:11 2026 from 203.xxx.xxx.xxx ubuntu@ip-172-31-xx-xx:~$
コストで比較する:azure vmとamazon ec2の料金設計
2vCPU・4GB RAMクラスを東日本・東京リージョンで比べます(従量課金の参考値・2026年10月時点)。| 比較項目 | Azure VM(Standard_B2s) | Amazon EC2(t3.medium) |
|---|---|---|
| vCPU / RAM | 2vCPU / 4GB | 2vCPU / 4GB |
| 時間単価(参考) | 約¥5.4/時間 | 約¥8.7/時間(0.0544USD/h換算) |
| 月間フル稼働(参考) | 約¥4,000 | 約¥6,400 |
| 予約割引(1年) | 約40%引き(Reservedプラン) | 約40%引き(RIスタンダード) |
| Windows Serverライセンス | Hybrid Benefit適用可(大幅割引) | BYOL(ライセンス持ち込み)対応 |
コスト面でAzureが有利なケース:
・Windows Serverライセンスを保有している(Hybrid Benefitで最大40%削減)
・Microsoft 365やEntra IDとの統合でライセンスをまとめて管理したい
・Azure DevOpsやVisual Studioのクレジットが発生している
コスト面でAWSが有利なケース:
・Spot Instanceで中断耐性のあるバッチ処理を大量に回す(スポット市場の歴史が長い)
・Savings Plansで複数サービス(EC2・Lambda・Fargate)をまとめて予約購入したい
Azureの学習コストを下げたい方は、LinuxエンジニアのためのAzureハンズオン学習ガイドもあわせて確認してください。
性能・機能で比較する:どちらが現場で使いやすいか
1. ネットワーク設計の違い
AzureのVNetは「サブネットがAZをまたげる」設計です。同じサブネットに異なるAZのVMを置けます。AWSのVPCは「サブネット=1つのAZ固定」なので、マルチAZ構成では必ずサブネットを複数作る必要があります。
どちらが優れているかではなく、AWSのほうが「AZごとに何が動いているか」が見やすく、障害の影響範囲が把握しやすいという利点があります。一方Azureは「サブネットを増やさずに冗長化できる」シンプルさが魅力です。
2. CLIの操作性
Azure CLIとAWS CLIはどちらもPythonベースで構造が似ています。実際にVM一覧を取得するコマンドを比べてみます。# Azure CLI:VMの一覧(tableフォーマット) az vm list --resource-group rg-linux-lab -o table # Name ResourceGroup Location Zones # ------------- --------------- ---------- ------- # vm-ubuntu-01 rg-linux-lab japaneast # AWS CLI:EC2インスタンスの一覧(JMESPathクエリが必要) aws ec2 describe-instances --query "Reservations[].Instances[].{ID:InstanceId,Name:Tags[?Key=='Name']|[0].Value,State:State.Name}" --region ap-northeast-1 --output table # ----------------------------------------------------- # | DescribeInstances | # +---------------------+--------------+---------+ # | ID | Name | State | # +---------------------+--------------+---------+ # | i-0abcd1234ef5678 | ec2-ubuntu-01| running | # +---------------------+--------------+---------+
--query でJMESPath記法が必要になる場面が多く、慣れるまで記述が複雑です。Azure CLIは -o table だけで整形された出力が得やすい傾向があります。
3. OSイメージ・ディストリビューション
| OS | Azure VM | Amazon EC2 |
|---|---|---|
| RHEL 9 | ○(マーケットプレイス) | ○(AMIマーケットプレイス) |
| Ubuntu 24.04 LTS | ○(標準イメージ) | ○(Canonical提供AMI) |
| Rocky Linux / AlmaLinux | ○(コミュニティ提供) | ○(AMIマーケットプレイス) |
| Amazon Linux 2023 | ×(AWS専用) | ○(AWSネイティブ・RHEL系) |
| Azure Linux(CBL-Mariner) | ○(Microsoft開発・維持) | ×(Azure専用) |
トラブルシュート:よくある接続エラーの対処法
1. Azure VM:「Connection timed out」でSSHが繋がらない
NSGのインバウンドルールにSSH(22番)が存在しないか、ソースIPが制限されているケースです。# NSGにSSHルールを追加(接続元IPを自分のPCのIPに絞る) az network nsg rule create --nsg-name vm-ubuntu-01NSG --resource-group rg-linux-lab --name allow-ssh-myip --priority 100 --protocol Tcp --direction Inbound --source-address-prefixes "203.xxx.xxx.xxx/32" --destination-port-ranges 22 --access Allow
2. Amazon EC2:「Permission denied (publickey)」が出る
鍵ファイルのパーミッションが緩い場合にSSHクライアントが接続を拒否します。# 症状の確認 ssh -i my-key-pair.pem ubuntu@13.xxx.xxx.xxx # @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ # @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ # @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ # Permissions 0644 for 'my-key-pair.pem' are too open. # 修正:所有者のみ読み取りに変更 chmod 600 my-key-pair.pem # 再接続 ssh -i my-key-pair.pem ubuntu@13.xxx.xxx.xxx
3. Azure VM:az loginの「AADSTS50076」エラー
多要素認証(MFA)が必要な組織テナントで対話型ログインが難しい場合は、デバイスコードフローを使います。# デバイスコードフローで認証(MFA対応) az login --use-device-code # To sign in, use a web browser to open the page # https://microsoft.com/devicelogin # and enter the code XXXXXXXX to authenticate.
本記事のまとめ:amazon azureどちらを選ぶかの判断軸
| 判断軸 | Azure VMが有利 | Amazon EC2が有利 |
|---|---|---|
| 既存資産 | Microsoft 365・Entra ID・Windows Server | AWS S3・RDS・Lambda等のAWSサービス群 |
| コスト戦略 | Hybrid BenefitとAzure予約割引の組み合わせ | Spot InstanceとSavings Plansの柔軟活用 |
| ネットワーク設計 | AZをまたぐシンプルなサブネット設計 | AZ単位のサブネットで障害範囲を明確化 |
| エコシステム | Azure DevOps・GitHub Actions・Microsoft製品統合 | ECS・EKS・Lambda・豊富なマネージドサービス |
| チームスキル | Microsoft製品に慣れたメンバー多数 | AWSに慣れたエンジニアが多い |
| 認定資格 | AZ-900・AZ-104を目指している | SAA・SOA・DVAを取得したい |
AzureでもAWSでも通じるLinuxの実践スキルを2日間のハンズオンセミナーで体系的に学べます。
>> LinuxエンジニアのためのAzure学習ガイドはこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:azureサービスエンドポイントとプライベートエンドポイントの違い|コスト・DNS設計で選ぶ
- この記事の属するカテゴリ:Azureへ戻る

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