Dependências de recursos no Bicep

Durante a implantação de recursos, talvez seja necessário certificar-se de que alguns recursos sejam implantados antes de outros. Por exemplo, é preciso obter um SQL Server lógico antes de implantar um banco de dados. Estabeleça essa relação tornando um recurso dependente de outro recurso. A ordem de implantação de recursos é determinada de duas maneiras: dependência implícita e dependência explícita

O Azure Resource Manager avalia as dependências entre os recursos e os implanta na ordem de dependência. Quando os recursos não dependem uns dos outros, o Gerenciador de Recursos os implanta paralelamente. Você só precisa definir as dependências para recursos que são implantados no mesmo arquivo Bicep.

Dependência implícita

Uma dependência implícita é criada quando uma declaração de recurso faz referência a outro recurso na mesma implantação. No exemplo a seguir, otherResourceobtém uma propriedade de exampleDnsZone. O recurso chamado otherResource é implicitamente dependente de exampleDnsZone.

resource exampleDnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'myZone'
  location: 'global'
}

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

Um recurso aninhado também tem uma dependência implícita no recurso recipiente.

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

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

Um recurso que inclui a propriedade pai tem uma dependência implícita no recurso pai. Isso depende do recurso pai, não de qualquer outro recurso filho.

O exemplo a seguir mostra uma conta de armazenamento e um serviço de arquivos. O serviço de arquivo tem uma dependência implícita na conta de armazenamento.

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

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

Quando existir uma dependência implícita, não adicione uma dependência explícita.

Para saber mais sobre recursos aninhados, confira Definir o nome e o tipo de recursos filho no Bicep.

Dependência explícita

Uma dependência explícita é declarada com a propriedade dependsOn. A propriedade aceita uma matriz de identificadores de recurso, assim você pode especificar mais de uma dependência. Você pode especificar uma dependência de recurso aninhado usando o :: operador.

O exemplo a seguir mostra uma zona DNS chamada otherZone que depende de uma zona DNS chamada dnsZone:

resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'demoeZone1'
  location: 'global'
}

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

Embora tenha interesse em usar dependsOn para mapear as relações entre os recursos, recomendamos entender por que você deseja executar esse tipo de ação. Por exemplo, para documentar de que modo os recursos estão interconectados, usar dependsOn não é técnica mais adequada. Após a implantação, o recurso não reterá as dependências de implantação em suas propriedades, portanto, não haverá comandos ou operações que permitirão ver as dependências. A configuração de dependências desnecessárias reduz o tempo de implantação porque o Resource Manager não pode implantar esses recursos em paralelo.

Embora as dependências explícitas às vezes sejam necessárias, é raro que isso aconteça. Na maioria dos casos, é possível usar um nome simbólico para implicar a dependência entre os recursos. Se você estiver definindo dependências explícitas, considere se há uma maneira de removê-las.

Visualizar as dependências do aplicativo

O Visual Studio Code fornece uma ferramenta para visualizar as dependências. Abra um arquivo Bicep no Visual Studio Code e selecione o botão visualizador no canto superior esquerdo. A captura de tela a seguir mostra as dependências de uma máquina virtual.

Captura de tela do visualizador de recursos Bicep do Visual Studio Code

Próximas etapas

Para obter a sintaxe para implantar um recurso, consulteDeclaração de recurso no Bicep.