1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Bicep を使ってみる (2)

Last updated at Posted at 2021-05-15

Microsoft Ignite (March 2-4, 2021) で Azure Bicep にちょっと興味を持ちました。
これまでやったことを忘れてしまいそうなので、前回に引き続きここに備忘録として置きます。

前回は、Bicep 開発を行うための環境の準備と、Bicep ファイルからストレージアカウントをデプロイしてみました。
今回は、リソースの依存関係について Bicep ファイルではどのように表すのかということを残しておきます。

リソースの依存関係

リソースをデプロイする時に、一部のリソースが他のリソースの前に存在していることを確認しなければならない場合があります。例えば、仮想マシンを作成するには、その前にネットワーク インターフェイス (、Unmanaged Disk の場合はストレージ アカウントも) が存在している必要があります。

image.png

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
        }
      ]
    }
    /*** 中略 ***/
  }
}

まとめ

スッキリした情報量なので、やりたいことがより分かりやすいですね :heart_eyes:

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?