【Bicep入門 #9】vNet・NIC・パブリックIPをBicepで展開する
この記事の内容
- VMのデプロイに必要なネットワークリソース(vNet・NIC・パブリックIP)をBicepで作成します
- 各リソースの依存関係と、Bicepでの相互参照の方法を学びます
resourceGroup().locationを使ったロケーション指定の方法を解説します- CI/CDパイプラインを使ったBicepの継続的デプロイの流れを確認します
- 実際のエラーとその対処方法を通じて、Bicepのデバッグ手順を学びます
VMに必要なネットワークリソースを把握する
VMをAzureに作成するには、VMリソース単体を作るだけでは不十分です。実際にAzureポータルでVMを参照すると、以下のリソースが必要であることがわかります。
- ネットワークインターフェイス(NIC)
- 仮想ネットワーク(vNet)
- ネットワークセキュリティグループ(NSG)(オプションだが実質必須)
- パブリックIPアドレス(他の経路がなければ必須)
この回では、これらのうちパブリックIP・vNet・NICの3つをBicepで展開していきます。
パブリックIPアドレスの作成
まずパブリックIPアドレスから作成します。リソースタイプは Microsoft.Network/publicIPAddresses です。
param publicIpName string
resource publicIp 'Microsoft.Network/publicIPAddresses@2023-04-01' = {
name: publicIpName
location: resourceGroup().location
properties: {}
}
ロケーションはパラメーターで受け取ることもできますが、resourceGroup().location を使うとリソースグループのロケーションを自動的に参照できます。これにより、デプロイ先に応じた値を自動設定できます。
仮想ネットワーク(vNet)の作成
次に仮想ネットワークを作成します。NICはサブネットを参照する必要があるため、先にvNetを作っておきます。
param vnetName string
resource vnet 'Microsoft.Network/virtualNetworks@2023-04-01' = {
name: vnetName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
'10.1.0.0/16'
]
}
subnets: [
{
name: 'default'
properties: {
addressPrefix: '10.1.0.0/24'
}
}
]
}
}
addressSpace の addressPrefixes はアレイ(配列)です。複数のアドレス空間が指定できる構造になっています。サブネットも同様に配列で定義します。
ネットワークインターフェイス(NIC)の作成
NICの作成では、サブネットのIDを参照する必要があります。Bicepではシンボル名(リソース変数名)を使って他のリソースのプロパティを参照できます。
param nicName string
resource nic 'Microsoft.Network/networkInterfaces@2023-04-01' = {
name: nicName
location: resourceGroup().location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
properties: {
subnet: {
id: vnet.properties.subnets[0].id
}
publicIPAddress: {
id: publicIp.id
}
}
}
]
}
}
ここでのポイントは以下の2点です。
ipConfigurationsはアレイ:複数のIP設定を持てる構造になっています。今回は1つだけ定義します- シンボル名での参照:
vnet.properties.subnets[0].idのように、同じBicepファイル内で定義したリソースのシンボル名を使って値を参照できます。これにより、リソース間の依存関係もBicepが自動解決します
CI/CDパイプラインでのデプロイ確認
この環境ではコミットをトリガーにCI/CDパイプラインが自動でBicepをデプロイする構成になっています。コミット後はAzureポータルまたはデプロイのサブスクリプション画面でデプロイ状況を確認できます。
デプロイ失敗時には、エラーメッセージにどのプロパティが不足しているかが表示されます。今回の作業で遭遇したエラー例は以下の通りです。
| エラー内容 | 原因 | 対処法 |
|---|---|---|
必須パラメーター name がない | モジュール呼び出し時にパラメーターを渡し忘れた | 呼び出し元で name を指定する |
location プロパティが未指定 | リソースに location を設定していなかった | resourceGroup().location を追加する |
subnet に id ではなくオブジェクトが必要 | サブネットIDではなくサブネット自体の参照が必要 | vnet.properties.subnets[0] で参照する |
デプロイ結果の確認
すべての修正を反映してデプロイに成功すると、Azureポータルで以下の状態を確認できます。
- リソースグループ内にvNet・NIC・パブリックIPが作成されている
- vNetのアドレス空間が
10.1.0.0/16に設定されている - サブネットが
10.1.0.0/24で作成されている - NICがサブネットに紐付いている
- パブリックIPがNICに関連付けられている
なお、この時点ではNICだけが存在しVMが未作成の状態になります。次のステップとしてVMを作成してNICにアタッチする作業が残っています。
まとめ
今回はAzure BicepでVMのデプロイに必要なネットワークリソースを作成する手順を解説しました。
- VMには vNet・NIC・パブリックIP が必要で、BicepではこれらをひとつのBicepファイルにまとめて定義できます
- リソース間の参照は シンボル名 を使って行い、Bicepが自動的に依存関係を解決します
ipConfigurationsのようなプロパティは アレイ形式 であることを意識する必要がありますresourceGroup().locationを使うことで、ロケーションをリソースグループから自動取得できます- CI/CDパイプラインと組み合わせることで、コミットのたびに自動デプロイが走る開発体験が得られます
次回はOSディスクの設定やVM本体のデプロイへと進む予定です。引き続きBicepでのAzureインフラ構築を学んでいきましょう。