Bicep をやってみた

前説

これまでAzureポータルから画面ポチポチでリソースを作ってきた人間が、Bicep という IaC を使って初めてリソースをデプロイする話。

1.Bicep のインストール

インストールするには Azure CLI が必要らしい。

このパソコン、az のバージョンいくつだっけなーと思ったら入ってすらなかったのでインストール。

インストールの仕方は下記 Docs に書いてある。

WindowsにAzure CLIをインストールする | Microsoft Learn

インストール方法は4種類あるが、今回は PowerShell でインストール。

PowerShell(管理者)を起動し、書いてあるコマンドを丸パクリして実行。

で、Bicep をインストール。

az bicep install

あっさり完了した。

2.VSC に拡張機能を入れる

Visual Studio Code (VSC) に Bicep の拡張機能が入れられるらしいので入れてみる。

これかな?Bicepで検索したらすぐに出てくる。

3.Bicep ファイルの準備

次に適当なフォルダを作って「main.bicep」というファイルを作る。

するとこんな感じの画面になるので、「vnet」と入れてみる。

おっ、どうやら vnet と名の付くリソースの候補が出てくるようだ。

試しに「res-vnet」を選んでみる。

どうやら仮想ネットワークのテンプレートが出てくるらしい。すげー!

このファイルを使って試しに仮想ネットワークをデプロイしてみることにする。

name は仮想ネットワークの名前。’name’ はどうかと思うので ‘yk-vnet’ に変更。

location は赤線で構文エラーになっていたので、resourceGroup().location に変更。これでリソースグループと同じリージョンにデプロイしてくれる。

編集したら保存しておく。

※保存せず空ファイルのままデプロイしちゃったら、エラーはなく「Successded」と表示されるが何も作られてなかった。一見、成功したように見えるので紛らわしい。

4.Bicep でデプロイ

まずは az login で Azure にサインイン。

az login

Microsoft へのサインイン画面が出るので、サブスクの所有者権限を持っているアカウントでサインイン。

サブスクは1個しか持ってないので「1」しか出てこない。どの番号のサブスク&テナントを選ぶか聞いてくるので「1」を指定。

次にデプロイ先のリソースグループ「yk-bicep」を Azure ポータルで作っておき、main.bicep ファイルがあるフォルダに移動して下記でデプロイ。

az deployment group create --resource-group yk-bicep --template-file main.bicep

実行結果はこんな感じ。

するとあ~らびっくり!仮想ネットワークができました。

ちゃんとサブネットもできてます。

5.コマンド補足

az deployment group create --resource-group yk-bicep --template-file main.bicep

「group」ってリソースグループって意味だろうけど、次に create ってついているから一見「リソースグループを作るの?」って思ったけど、ここの部分は違う意味だった。

Copilot 君に聞いてみた。

ふむふむ。ここのパラメータは「今作ろうとしているもの」の「1つ上の階層」を指定するようだ。

  • 「リソース」を作るときは「リソースグループ(group)」を指定。
  • 「リソースグループ」を作るときは「サブスクリプション(sub)」を指定。
  • 「サブスクまたぎの設定」を作るときは「管理グループ(mg)」を指定。

6.既存リソースのエクスポート

Azure ポータルの「テンプレートのエクスポート」から既存リソースの Bicep をエクスポートできる。

デプロイしたときの main.bicep と比較してみた。

明らかにエクスポートした Bicep ファイルの方がボリュームが多い。

何が増えているのかを Copilot 君に聞いてみた。

1.API バージョンが違う。

 エクスポートは 常に最新に近い API を使う。インポートは自分の API バージョン を使う。

  • インポート:Microsoft.Network/virtualNetworks@2019-11-01
  • エクスポート:Microsoft.Network/virtualNetworks@2025-05-01

2.「省略できるデフォルト値」が全部展開される。

 Azure 内部では 明示されていない設定も実際には存在し、エクスポートすると現在値をすべて吐き出す。

3.リソースの親子関係まで書かれている

 「仮想ネットワーク」と「サブネット」。実は ARM 内部では「サブネット」は独立した仮想ネットワークの「子リソース」。

 エクスポートすると、その親子関係も完全明示される。人が読む Bicep としてはいらない過剰な情報。

4.iddependsOn が増える

 デプロイ順序を100%保障するために明示される。人が読む Bicep としてはいらない過剰な情報。

補足:location が固定値

 location を resourceGroup().location にした部分は実際のリージョン「japaneast」になる。

参考サイト

\ 最新情報をチェック /