Azure Bicep を使ってみる (2)
Microsoft Ignite (March 2-4, 2021) で Azure Bicep にちょっと興味を持ちました。
これまでやったことを忘れてしまいそうなので、前回に引き続きここに備忘録として置きます。
前回は、Bicep 開発を行うための環境の準備と、Bicep ファイルからストレージアカウントをデプロイしてみました。
今回は、リソースの依存関係について Bicep ファイルではどのように表すのかということを残しておきます。
リソースの依存関係
リソースをデプロイする時に、一部のリソースが他のリソースの前に存在していることを確認しなければならない場合があります。例えば、仮想マシンを作成するには、その前にネットワーク インターフェイス (、Unmanaged Disk の場合はストレージ アカウントも) が存在している必要があります。
ARM テンプレートでは
ARM テンプレートでは、このリレーションシップ (あるリソースが他のリソースに依存している) を dependsOn
要素内に文字列の JSON 配列でリソース名、またはリソース ID を列挙して定義します。
以下のテンプレートでは、リソースの依存関係を以下のように定義しています。
- ネットワーク インターフェイス リソースは、仮想ネットワーク リソースとパブリック IP リソースに依存している
- 仮想マシン リソースは、ネットワークインターフェイス リソースに依存している
/* ネットワーク インターフェイスの定義 */
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2018-10-01",
"name": "[parameters('networkInterfaceName')]",
"location": "[parameters('location')]",
"dependsOn": [
/* 依存リソース */
"[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]",
"[concat('Microsoft.Network/publicIpAddresses/', parameters('publicIpAddressName'))]"
],
"properties": {
/***** 中略 *****/
}
}
/* 仮想マシンの定義 */
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2021-03-01",
"name": "[parameters('virtualMachineName')]",
"location": "[parameters('location')]",
"dependsOn": [
/* 依存リソース */
"[concat('Microsoft.Network/networkInterfaces/', parameters('networkInterfaceName'))]"
],
"properties": {
/***** 中略 *****/
}
}
Bicep ファイルでは
Bicep ファイルでは、このリレーションシップをシップシンボリック名を参照することで dependsOn
プロパティが自動的に追加されます。
リソース ID はリソースのシンボリック名から簡単に参照することができます。例えば、ネットワーク インターフェイスのリソース ID は networkInterfaceName_resource.id
というように参照でき、コンパイルされた ARM テンプレートでは resourceId 関数に変換されます。
var vnetId = resourceId(resourceGroup().name, 'Microsoft.Network/virtualNetworks', virtualNetworkName)
var subnetRef = '${vnetId}/subnets/${subnetName}'
/* ネットワーク インターフェイス リソースの定義 */
resource networkInterfaceName_resource 'Microsoft.Network/networkInterfaces@2018-10-01' = {
name: networkInterfaceName
location: location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
properties: {
subnet: {
/* ↓↓↓ 仮想ネットワーク リソース (サブネット) を参照 */
id: subnetRef
}
privateIPAllocationMethod: 'Dynamic'
publicIPAddress: {
/* ↓↓↓ パブリック IP リソースを参照 */
id: resourceId(resourceGroup().name, 'Microsoft.Network/publicIpAddresses', publicIpAddressName)
}
}
}
]
enableAcceleratedNetworking: enableAcceleratedNetworking
}
dependsOn: [
virtualNetworkName_resource
publicIpAddressName_resource
]
}
/* 仮想マシン リソースの定義 */
resource virtualMachineName_resource 'Microsoft.Compute/virtualMachines@2021-03-01' = {
name: virtualMachineName
location: location
properties: {
/*** 中略 ***/
networkProfile: {
networkInterfaces: [
{
/* ↓↓↓ ネットワーク インターフェイス リソースを参照 */
id: networkInterfaceName_resource.id
}
]
}
/*** 中略 ***/
}
}
まとめ
スッキリした情報量なので、やりたいことがより分かりやすいですね
参考文献
Author And Source
この問題について(Azure Bicep を使ってみる (2)), 我々は、より多くの情報をここで見つけました https://qiita.com/tetsuya-ooooo/items/d0ea22ee3d92919dd392著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .