見出し画像

Bicepテンプレートでリソースグループと Virtual Network を一気にデプロイしてみよう【module】

こちらの記事でリソースグループをまずは作成してみましたが、今回はさらにこのグループに所属するリソースも一気に作成してデプロイできるようにしたいと思います。

ズバリ今回のテーマは、『 モジュールを使ったデプロイ 』です。
具体的には、モジュールという概念を活用してリソースグループと併せて仮想ネットワークも一緒にデプロイします。

三分くらいで読めるサクッと記事なのでぜひ最後まで読んでもらえると嬉しいです。

前提知識

モジュール 【 module 】

モジュールとは、別の Bicep ファイルからデプロイされる単なる Bicep ファイルです。

Bicep モジュール

こちらの記事では、ARMテンプレートの場合ですが『 テンプレートファイルの分割 』について触れましたが、このようなパラメーターファイルではない分割を今回行います。

メインテンプレートから別のテンプレートファイル(モジュールファイル)を参照してその内容をデプロイするのです。

必要なファイルを完成させる

必要となるファイル

「 Sample-Template 」というフォルダを作成し、そこに二つのファイルを格納しています。

「 main.bicep 」というのがデプロイ時に指定するテンプレートファイルで、そこから呼び出されるモジュールファイルが「 vnet-subnets.bicep 」です。
他のリソースを増やしていく場合にわかりやすいので、「 nested 」というフォルダにモジュールファイルをまとめることにしています(今回の時点ではまだ一つだけですが)。

Sample-Templatemain.bicep
│
└─nested
        vnet-subnets.bicep 👈モジュールファイル

モジュールファイルの作成

最終的な記述内容

リソースとして定義して記述するものは一つだけです。
シンボリック名を「 vnet 」とした仮想ネットワークです。

今回の例では、一つの仮想ネットワーク ( 10.10.0.0/16 ) を作成しその中に二つのサブネット ( 10.10.1.0/24, 10.10.2.0/24 ) を作成します。

param vnetName string = 'vNet' 
param addressPrefix string = '10.10.' 
param location string

var vnetSubnetMask = '/16' 
var subnet1 = { 
  name: 'subnet1' 
  properties: { 
    addressPrefix: '${addressPrefix}1.0/24' 
  } 
} 
var subnet2 = { 
    name: 'subnet2' 
    properties: { 
      addressPrefix: '${addressPrefix}2.0/24' 
    } 
} 

// ここから下の部分がリソースについての記述
resource vnet 'Microsoft.Network/virtualNetworks@2021-05-01' = { 
  name: vnetName 
  location: location 
  properties: { 
    addressSpace: { 
      addressPrefixes: [ 
        '${addressPrefix}0.0${vnetSubnetMask}' 
      ] 
    } 
    subnets: [ 
      subnet1 
      subnet2 
    ] 
  } 
}

補足

~ サブネットについて ~

仮想ネットワークのプロパティの一つとして記述します。
リソース名やネットワークアドレス、サブネットマスクは変数 ( var ) から渡します。

テンプレートファイルの修正

最終的な記述内容

以前の記事で作成したファイルに手を加えました。
といってもちょっとだけ記述を追加しただけですが。

仮想ネットワーク関連のリソースをデプロイするための、モジュールを宣言しているのです。

targetScope = 'subscription'

param resourceGroupName string = 'test-rg' 

@description('Location for all resources.') 
@allowed([ 
  'japaneast' 
  'japanwest' 
]) 
param resourceGroupLocation string = 'japanwest' 

resource newRG 'Microsoft.Resources/resourceGroups@2021-04-01' = { 
  name: resourceGroupName 
  location: resourceGroupLocation 
} 

// 追記
module vnetModule 'nested/vnet-subnets.bicep' = { 
  scope: newRG 
  name: 'vNet-deploy' 
  params: { 
    location: resourceGroupLocation 
  } 
}

補足

~ モジュールの宣言 ~

<symbolic-name>を「 vnetModule 」としました。
'<path-to-file>'については、前述したとおりmain.bicepテンプレートファイルと同じ階層にある「 nested 」の下にモジュールファイルがあるわけなので「 nested/vnet-subnets.bicep 」と記述しています。

また、「 scope: newRG 」と指定することで作成するリソースグループに所属するリソースとして仮想ネットワークをデプロイできます。

module <symbolic-name> '<path-to-file>'

公式ドキュメント:定義の構文

~ モジュールファイルに渡すパラメーター ~

モジュールファイルのパラメーター「 location 」にはデフォルト値を記述しませんでした。
なので何とかしてこれに値を渡さなければなりません。

今回はテンプレートファイル内で定義したパラメーター「 resourceGroupLocation 」のデフォルト値を渡しています。
こうすることで、作成するリソースグループと同じリージョンでデプロイできます。

🟠 さいごに 🔚

いかがだったでしょうか?

これらのファイルをサブスクリプションのレベルでデプロイしてください。
問題なく記述したリソースがデプロイされます。
検証などのために一時的な環境を作成するのに助かりますね。

このようにモジュール化することで、記述が集約されずテンプレートファイルの肥大化を防げますし、使いまわしがやりやすくなります。
仮想ネットワークだけだと実用性に乏しいので、今後はVMなどのリソースも併せてデプロイできる内容を記事にしようと思います。

今後も Azure に関する技術情報やその他の資格試験に関する記事を書いていこうと思いますので、よろしければフォローをお願いします🔆

また、この記事が少しでもタメになった、面白かったという方がいらっしゃいましたら、ぜひ 「 スキ 」 ボタンのクリックをお願いします😋

最後までお読みいただきありがとうございました 😊

#スキしてみて  #勉強 #学び #挑戦 #初心者 #IT #学習 #つくってみた #ITエンジニア #駆け出しエンジニア #クラウド  #今日の積み上げ #IT業界  #Microsoft #IT企業 #インフラエンジニア #インフラ #小ネタ #マイクロソフト #ITネタ  #お役立ち情報 #重要  #azure #クラウドサービス #非エンジニア #パブリッククラウド #非エンジニア向け

▶ 続けて読むのにおススメな記事


この記事が参加している募集

スキしてみて

つくってみた

もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。