Azure Bicep 사용하기 (2)

10229 단어 AzureIaCAzureBicep
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
            }
          ]
        }
        /*** 中略 ***/
      }
    }
    

    요약



    깨끗한 정보량이므로, 하고 싶은 것이 보다 알기 쉽네요

    참고문헌

    좋은 웹페이지 즐겨찾기