Bicepテンプレートでリソースグループと Virtual Network を一気にデプロイしてみよう【module】
こちらの記事でリソースグループをまずは作成してみましたが、今回はさらにこのグループに所属するリソースも一気に作成してデプロイできるようにしたいと思います。
ズバリ今回のテーマは、『 モジュールを使ったデプロイ 』です。
具体的には、モジュールという概念を活用してリソースグループと併せて仮想ネットワークも一緒にデプロイします。
三分くらいで読めるサクッと記事なのでぜひ最後まで読んでもらえると嬉しいです。
前提知識
モジュール 【 module 】
こちらの記事では、ARMテンプレートの場合ですが『 テンプレートファイルの分割 』について触れましたが、このようなパラメーターファイルではない分割を今回行います。
メインテンプレートから別のテンプレートファイル(モジュールファイル)を参照してその内容をデプロイするのです。
必要なファイルを完成させる
必要となるファイル
「 Sample-Template 」というフォルダを作成し、そこに二つのファイルを格納しています。
「 main.bicep 」というのがデプロイ時に指定するテンプレートファイルで、そこから呼び出されるモジュールファイルが「 vnet-subnets.bicep 」です。
他のリソースを増やしていく場合にわかりやすいので、「 nested 」というフォルダにモジュールファイルをまとめることにしています(今回の時点ではまだ一つだけですが)。
Sample-Template
│ main.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 」と指定することで作成するリソースグループに所属するリソースとして仮想ネットワークをデプロイできます。
~ モジュールファイルに渡すパラメーター ~
モジュールファイルのパラメーター「 location 」にはデフォルト値を記述しませんでした。
なので何とかしてこれに値を渡さなければなりません。
今回はテンプレートファイル内で定義したパラメーター「 resourceGroupLocation 」のデフォルト値を渡しています。
こうすることで、作成するリソースグループと同じリージョンでデプロイできます。
🟠 さいごに 🔚
いかがだったでしょうか?
これらのファイルをサブスクリプションのレベルでデプロイしてください。
問題なく記述したリソースがデプロイされます。
検証などのために一時的な環境を作成するのに助かりますね。
このようにモジュール化することで、記述が集約されずテンプレートファイルの肥大化を防げますし、使いまわしがやりやすくなります。
仮想ネットワークだけだと実用性に乏しいので、今後はVMなどのリソースも併せてデプロイできる内容を記事にしようと思います。
今後も Azure に関する技術情報やその他の資格試験に関する記事を書いていこうと思いますので、よろしければフォローをお願いします🔆
また、この記事が少しでもタメになった、面白かったという方がいらっしゃいましたら、ぜひ 「 スキ 」 ボタンのクリックをお願いします😋
最後までお読みいただきありがとうございました 😊
#スキしてみて #勉強 #学び #挑戦 #初心者 #IT #学習 #つくってみた #ITエンジニア #駆け出しエンジニア #クラウド #今日の積み上げ #IT業界 #Microsoft #IT企業 #インフラエンジニア #インフラ #小ネタ #マイクロソフト #ITネタ #お役立ち情報 #重要 #azure #クラウドサービス #非エンジニア #パブリッククラウド #非エンジニア向け