【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'
        }
      }
    ]
  }
}

addressSpaceaddressPrefixes はアレイ(配列)です。複数のアドレス空間が指定できる構造になっています。サブネットも同様に配列で定義します。


ネットワークインターフェイス(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 を追加する
subnetid ではなくオブジェクトが必要サブネット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インフラ構築を学んでいきましょう。