この記事でわかること

Azureの資格は持っている。ただ、ポータルで一からサーバーを建てて、Webページを出して、きれいに片付けるところまで自分の手でやった経験は薄い。そこで、Claudeに先生役をやってもらってAzureの実務経験を積むことにした。題して「Claude先生と、Azureのお気楽実践」。

1本目は、Windows Server 2025を建ててIIS(Webサーバー)を動かすまで。ポータルで1回、CLIでもう1回作った。結論から言うと、**つまずいたのは知識不足よりも「既定値」**だった。VMサイズが選べない、ネットワークが既定で新規作成になる、CLIだとBastionが有料版になる。どれも資格の勉強ではあまり意識しなかったところだ。かかった金額は2回合わせて60円に届かない程度で、クレジットで請求は0円だった。

記事概要図

① リソースグループ rg-lab-stage1 = 今日の置き場所。終わりに丸ごと捨てる単位 無料 ② 仮想ネットワーク(VNet)+サブネット 10.0.0.0/16 の中に 10.0.1.0/24 = サーバーを置く通路 無料 ③ ネットワークセキュリティグループ(NSG) サブネットの門番。何を通し、何を止めるかの規則 無料 ④ 仮想マシン(Windows Server 2025) D2as v7・Standard SSD 32GB・パブリックIPなし 約34円/時 ⑤ Bastion(Developer) ブラウザから安全に入る入口。IPもポートも開けない 無料 ⑥ IIS+テストサイト VMの中の作業。役割を追加してページを1枚置く 無料 積む順 下が無いと 上は作れない

下から順に積む。下が無いと上は作れないので、この順番は入れ替えられない。費用のほとんどは仮想マシンで、ほかは無料か1円未満だった。

資格はあるのに、手を動かした経験が足りない

自分はAWSとAzureで計7つの資格を持っている。AZ-104の勉強法も記事に書いた。ただ、試験で問われるのは「どのサービスを選ぶか」までで、実際に画面の前に座ると手順も既定値も知らないことだらけになる。

一方で、週末しか時間がないので、分厚い教材を最初から順番にやる余裕はない。そこで、Claudeに先生役を頼んだ。最初に決めたルールはこうだ。

  • 先生(Claude)は課題を出して、詰まったらヒントを3段階で出す(方向性 → 使うコマンド名 → 答え)
  • 手を動かすのは自分。最後に口頭試問で理解を確かめる
  • 1つの課題を「ポータル → CLI → Bicep(コード)」の順に3回作る
  • 毎回リソースグループごと削除して、課金を残さない

題材はWindows Server 2025+IIS。インターネットに口を開けず、VNetの中だけでWebページを出す構成にした。

1周目(ポータル)でつまずいた3つの既定値

1周目は約3時間かかった。そのうち40分ほどは環境トラブルの調査に消えている。

つまずき①:指定したVMサイズが使えない

最初に予定していた D2as_v5 と B2als_v2 を選ぶと、画面に NotAvailableForSubscription と出た。CLIで利用枠を調べると、返ってきたのは空っぽの一覧だった。

az vm list-usage -l japaneast -o json
# [] = VMの利用枠が1つも割り当てられていない

新しく作った従量課金のサブスクリプションには、VMの利用枠が最初から全部付いているわけではなかった。クォータの増加を申請して待つ手もあったが、いつ通るか読めない。そこで東日本で制限なく使えるサイズを探し、Standard_D2as_v7(2コア・8GB)に切り替えた。

つまずき②:VMの作成画面で、ネットワークが「新規作成」になっていた

VNetとNSGを先に作っておいたのに、VM作成の最終確認画面に (新規) vnet-japaneast-1 と出ていた。そのまま作っていたら、自分で用意したネットワークは使われず、NSGも効かないVMができていたところだった。同じ画面でOSディスクがPremiumになっていたのも見つけて、Standard SSDに戻した。

作成ボタンを押す前に、最終確認画面の全項目を上から読む。 1周目の一番の収穫はこれだった。

つまずき③:サブネットが外に出られない設定だった

2026年3月31日以降のAPIでは、新しいVNetのサブネットが既定で「プライベートサブネット」になり、明示的な出口を用意しない限りインターネットに出られない(Microsoft Learn:Azure での既定の送信アクセス)。気づかないまま進めると、VMからWindows Updateすら通らない。作った後でもCLIから変更できたので、今回はプライベートを外して進めた。これは練習用の割り切りで、本番ならNAT Gatewayなどの明示的な出口を用意するのが公式の推奨だ。

2周目の途中で、Claude先生への頼み方を変えた

2周目はCLIで同じものを作った。ところが、ここで手が止まった。コマンドを一から自分で組み立てようとすると、オプションを調べているうちに時間が溶ける。課題1から「ヒント①」「ヒント②」と連打して、結局夜をまたいでしまった。

そのときClaude先生にこう伝えた。

コマンドを自分で作るのはきびしく、結局AIに聞きまくっている。実務でもコマンドを直接作ることはないため、コマンドと解説がわかる手順を作ってもらい、それを実施しながら構築された成果物をみていく、というようにしたい。

実務でも、コマンドは手順書や過去の資産から持ってくることがほとんどだ。大事なのは書けることより、読めること、結果を確かめられること、地雷を知っていることのほうだと考え直した。Claude先生もこれを受けて、「コマンド+意味+見るポイント」付きの手順書を用意する方式に切り替えた。

切り替えた結果、残りのVM作成からIIS、削除確認までの課題3〜5は約67分で終わった。

山場:IISを入れて、Windowsファイアウォールの設定が自動で変わるのを確認

2周目で特に確かめたかったのがここだ。IISを入れる前後で、Windowsファイアウォールがどう変わるかを見比べた。

実行する前の自分の予想は「HTTPのルールはもう存在していて、無効になっているだけ」。結果は外れた。

見たものIIS導入前IIS導入後
Webの受信ルール存在しないHTTP/HTTPS/QUICの3本が作られて有効
80番で待ち受けているものなしSystem(PID 4)

ルールは無効で待っていたのではなく、IISの導入と同時に作られていた。しかも80番を持っているのはIISのプロセスではなく、Windowsの中核にいる受付係の http.sys。これが80番で受けて、IISに渡している。「80番の持ち主がSystem」と表示されても異常ではない。

Webページが外から届くには、Azure側のNSG(外の門)とWindowsファイアウォール(中の門)の両方を通る必要がある。IISの導入で変わったのは中の門だけで、外の門は閉じたままだ。

導入前 VM vm-web01(10.0.1.4) 外の門:NSG 80番 拒否 中の門:Windows FW 80番を通すルール 無し/無効 ポート80で待つ人 Webサーバー いない 誰も応答 できない 導入後(Install-WindowsFeature -Name Web-Server を実行しただけ) VM vm-web01(10.0.1.4) 外の門:NSG 80番 拒否のまま 中の門:Windows FW World Wide Web Services (HTTP Traffic-In) 有効 ポート80で待つ人 W3SVC(IIS) 待機中 index.html を返す

ついでにClaude先生から口頭試問が来た。「Windows側の80番は開いた。では自宅のMacから http://10.0.1.4 は見えるか」。答えは見えない。10.0.1.4 はプライベートIPなのでMacからの道がないし、外側のNSGも受け付けない。Bastionは画面を中継しているだけで、HTTPの通り道ではない。ページの表示を確かめる時は、Bastionで入ったVMの中のブラウザ(Edge)で開いた。

自宅のMac インターネット側 Azure vnet-lab(10.0.0.0/16) snet-app(10.0.1.0/24)+ NSG nsg-app vm-web01 10.0.1.4(パブリックIPなし) IIS(80番) Windowsファイアウォール:開 VMの中のEdge http://localhost を開く VMの外に出ない ブラウザで http://10.0.1.4 ✗① 道がない 10.0.1.4はVNetの中だけの住所 ✗② 仮に届いても拒否 NSG DenyAllInBound(65500) ポータルの Bastionタブ Bastion Developer(Azureの共用窓口) HTTPS 443 画面の映像 RDP 3389 VNetの内側から → AllowVnetInBound で許可

ポータルとCLIで既定値が違う

2周目でもう1つ分かったのは、同じものを作っているのに、ポータルとCLIで既定値が違うことだ。CLIを既定のまま流すと、ポータルと同じ構成にはならない。

項目ポータルCLI(既定のまま)
パブリックIP・NIC用NSG画面で「なし」を選べる自動で作られる(NSGはRDP許可付き)
セキュリティの種類Trusted Launchが既定Standard
自動シャットダウンの時刻タイムゾーンを選べるUTC固定(日本時間23時=1400)
Bastionの種類接続時にDeveloper(無料)が作られる--sku 省略でStandard(有料)

特にBastionは、CLIで --sku Developer を付け忘れると有料版が立つ。お気楽実践でいちばん避けたいのは、こういう気づかないうちの課金だ。

費用と片付け:消す前に7つ数える

最後はリソースグループごと削除する。その前に一覧を数えたら7つあった。1周目(ポータル)の場合、自分で指定して作ったのはVNet・NSG・VMの3つだけで、残りの4つは自動で作られていた。

  • NIC(IPアドレスはVMではなくNICに付く)
  • OSディスク
  • 自動シャットダウンの設定(設定が独立したリソースになっている)
  • Bastion

さらに、自動シャットダウンの設定はポータルの「すべてのリソース」に既定では表示されない。消す前はCLIで数えるほうが確実だった。削除後に残るのは、別のリソースグループに作られる監視用の NetworkWatcherRG だけ。これは無料なので放置でいい。

金額は、1周目がCost Managementの表示で約21円(まだ反映途中かもしれない)、2周目はVMを約1時間動かして約34円の見込み。どちらもクレジットに充当されて、請求は0円だった。念のため、月300円と500円で通知が来る予算アラートと、使えるVMサイズと地域を絞るAzure Policyを最初に仕掛けている。お気楽にやるための柵だ。

やってみて分かった3つのこと

  1. 既定値は画面を読まないと分からない。 資格の知識があっても、クォータやネットワークの「新規作成」は作成画面の中にしか書いていない。
  2. コマンドは書けなくていい。読めて、結果を確かめられればいい。 やり方を変えてから、学ぶ中心が「覚える」から「観察する」に移った。
  3. 片付けまでが1回。 数えて、消して、残りがゼロなのを確かめて終わる。これを毎回やれば課金は怖くない。

次回はこのサーバーに監視エージェントを入れて、アラートとバックアップまで進める予定。

資格の知識を先に固めたい人は、Azure資格ロードマップに取る順番をまとめてある。手を動かす練習をもう少し体系立ててやりたいなら、UdemyにはAZ-104向けのハンズオン講座も多い。

Udemyで講座を探す(セール時が狙い目)