Bicep의 리소스 종속성

리소스를 배포할 때 일부 리소스가 다른 리소스보다 먼저 배포되었는지 확인해야 할 수 있습니다. 예를 들어 데이터베이스를 배포하기 전에 논리 SQL Server가 필요합니다. 하나의 리소스를 다른 리소스에 종속된 것으로 표시하여 이 관계를 설정합니다. 리소스 배포 순서는 암시적 종속성명시적 종속성의 두 가지 방법으로 결정됩니다.

Azure Resource Manager는 리소스 간의 종속성을 평가한 후 종속된 순서에 따라 리소스를 배포합니다. 리소스가 서로 종속되어 있지 않은 경우 Resource Manager는 이를 병렬로 배포합니다. 동일한 Bicep 파일에 배포되는 리소스에 대한 종속성만 정의하면 됩니다.

암시적 종속성

암시적 종속성은 한 리소스 선언이 동일한 배포의 다른 리소스를 참조할 때 만들어집니다. 다음 예에서 otherResourceexampleDnsZone에서 속성을 가져옵니다. otherResource라는 리소스는 암시적으로 exampleDnsZone에 종속됩니다.

resource exampleDnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = {
  name: 'myZone'
  location: 'global'
}

resource otherResource 'Microsoft.Example/examples@2024-05-01' = {
  name: 'exampleResource'
  properties: {
    // get read-only DNS zone property
    nameServers: exampleDnsZone.properties.nameServers
  }
}

중첩된 리소스에는 포함하는 리소스에 대한 암시적 종속성도 있습니다.

resource myParent 'My.Rp/parentType@2024-05-01' = {
  name: 'myParent'
  location: 'West US'

  // implicit dependency on 'myParent'
  resource myChild 'childType' = {
    name: 'myChild'
  }
}

부모 속성을 포함하는 리소스에는 부모 리소스에 대한 암시적 종속성이 있습니다. 다른 자식 리소스가 아닌 부모 리소스에 따라 달라집니다.

다음 예제에서는 스토리지 계정 및 파일 서비스를 보여 줍니다. 파일 서비스에는 스토리지 계정에 대한 암시적 종속성이 있습니다.

resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource service 'Microsoft.Storage/storageAccounts/fileServices@2023-04-01' = {
  name: 'default'
  parent: storage
}

resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-04-01' = {
  name: 'exampleshare'
  parent: service
}

암시적 종속성이 있는 경우에는 명시적 종속성을 추가하지 마세요.

중첩된 리소스에 대한 자세한 내용은 Bicep에서 자식 리소스의 이름과 종류 설정을 참조하세요.

명시적 종속성

명시적 종속성은 dependsOn 속성을 사용하여 선언됩니다. 이 속성은 리소스 식별자 배열을 허용하므로 둘 이상의 종속성을 지정할 수 있습니다. :: 연산자를 사용하여 중첩된 리소스 종속성을 지정할 수 있습니다.

다음 예제에서는 dnsZone이라는 DNS 영역에 종속되는 otherZone이라는 DNS 영역을 보여 줍니다.

resource dnsZone 'Microsoft.Network/dnszones@2023-07-01-preview' = {
  name: 'demoeZone1'
  location: 'global'
}

resource otherZone 'Microsoft.Network/dnszones@2023-07-01-preview' = {
  name: 'demoZone2'
  location: 'global'
  dependsOn: [
    dnsZone
  ]
}

리소스 간의 관계를 매핑하기 위해 dependsOn을 사용하는 경향이 있을 수 있지만 왜 그렇게 하는지 이해하는 것이 중요합니다. 예를 들어, 리소스가 상호 연결되는 방식을 문서화하기 위해 dependsOn은 올바른 접근 방식이 아닙니다. 배포 후 리소스는 해당 속성에 배포 종속성을 유지하지 않으므로 종속성을 볼 수 있는 명령이나 작업이 없습니다. 불필요한 종속성을 설정하면 Resource Manager가 해당 리소스를 병렬로 배포할 수 없기 때문에 배포 시간이 느려집니다.

명시적 종속성이 필요한 경우도 있지만 이러한 경우는 드문 편입니다. 대부분의 경우 심볼 이름을 사용하여 리소스 간의 종속성을 암시할 수 있습니다. 명시적 종속성을 설정하는 경우 해당 종속성을 제거하는 방법이 있는지를 고려해야 합니다.

종속성 시각화

Visual Studio Code는 종속성을 시각화하기 위한 도구를 제공합니다. Visual Studio Code에서 Bicep 파일을 열고 왼쪽 상단 모서리에 있는 시각화 도우미 단추를 선택합니다. 다음 스크린샷에서는 가상 머신의 종속성을 보여 줍니다.

Screenshot of Visual Studio Code Bicep resource visualizer

다음 단계

리소스를 배포하는 구문은 Bicep의 리소스 선언을 참조하세요.