Partilhar via


Início Rápido: Criar várias instâncias de recursos no Bicep

Saiba como utilizar diferentes for sintaxes para criar várias instâncias de recursos no Bicep. Embora este artigo mostre apenas a criação de várias instâncias de recursos, os mesmos métodos podem ser utilizados para definir cópias do módulo, variável, propriedade ou saída. Para saber mais, veja Ciclos do Bicep.

Este artigo contém os seguintes tópicos:

Pré-requisitos

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Para configurar o seu ambiente para o desenvolvimento do Bicep, veja Instalar ferramentas do Bicep. Depois de concluir esses passos, terá o Visual Studio Code e a extensão bicep. Também tem a CLI do Azure mais recente ou o módulo de Azure PowerShell mais recente.

Criar uma única instância

Nesta secção, vai definir um ficheiro Bicep para criar uma conta de armazenamento e, em seguida, implementar o ficheiro Bicep. As secções subsequentes fornecem os exemplos de Bicep para diferentes for sintaxes. Pode utilizar o mesmo método de implementação para implementar e experimentar esses exemplos. Se a implementação falhar, é provável que seja uma das duas causas:

  • O nome da conta de armazenamento é demasiado longo. Os nomes das contas de armazenamento têm de ter entre 3 e 24 carateres de comprimento e apenas podem conter números e letras minúsculas.
  • O nome da conta de armazenamento não é exclusivo. O nome da sua conta do Storage tem de ser exclusivo no Azure.

O seguinte ficheiro Bicep define uma conta de armazenamento:

param rgLocation string = resourceGroup().location

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

Guarde o ficheiro Bicep localmente e, em seguida, utilize a CLI do Azure ou Azure PowerShell para implementar o ficheiro Bicep:

resourceGroupName = "{provide-a-resource-group-name}"
templateFile="{provide-the-path-to-the-bicep-file}"

az group create --name $resourceGroupName --location eastus

az deployment group create --resource-group $resourceGroupName --template-file $templateFile

Utilizar índice inteiro

A for loop with an index is used in the following sample to create two storage accounts:

param rgLocation string = resourceGroup().location
param storageCount int = 2

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for i in range(0, storageCount): {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

output names array = [for i in range(0,storageCount) : {
  name: createStorages[i].name
} ]

O número do índice é utilizado como parte do nome da conta de armazenamento. Depois de implementar o ficheiro Bicep, obtém duas contas de armazenamento semelhantes a:

Utilizar o índice inteiro com 0 como número inicial

Dentro do intervalo(), o primeiro número é o número inicial e o segundo número é o número de vezes que o ciclo será executado. Por isso, se o alterar para intervalo(3,2), também obterá duas contas de armazenamento:

Utilizar o índice inteiro com 3 como número inicial

O resultado do exemplo anterior mostra como referenciar os recursos criados num ciclo. O resultado é semelhante a:

"outputs": {
  "names": {
    "type": "Array",
    "value": [
      {
        "name": "0storage52iyjssggmvue"
      },
      {
        "name": "1storage52iyjssggmvue"
      }
    ]
  }
},

Utilizar elementos de matriz

Pode percorrer uma matriz. O exemplo seguinte mostra uma matriz de cadeias.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for name in storageNames: {
  name: '${name}str${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

O ciclo utiliza todas as cadeias na matriz como parte dos nomes das contas de armazenamento. Neste caso, cria duas contas de armazenamento:

Utilizar uma matriz de cadeias

Também pode percorrer uma matriz de objetos. O ciclo não só personaliza os nomes da conta de armazenamento, como também configura os SKUs.

param rgLocation string = resourceGroup().location
param storages array = [
  {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
]

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for storage in storages: {
  name: '${storage.name}obj${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: storage.skuName
  }
  kind: 'StorageV2'
}]

O ciclo cria duas contas de armazenamento. O SKU da conta de armazenamento com o nome a começar pela fabrikam é Premium_LRS.

Utilizar uma matriz de cadeias

Utilizar matriz e índice

Nos mesmos casos, poderá querer combinar um ciclo de matriz com um ciclo de índice. O exemplo seguinte mostra como utilizar a matriz e o número do índice para a convenção de nomenclatura.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for (name, i) in storageNames: {
  name: '${i}${name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

Depois de implementar o exemplo anterior, crie duas contas de armazenamento semelhantes a:

Utilizar uma matriz de cadeias e número de índice

Utilizar objeto de dicionário

Para iterar elementos num objeto de dicionário, utilize a função itens, que converte o objeto numa matriz. Utilize a value propriedade para obter propriedades nos objetos.

param rgLocation string = resourceGroup().location

param storageConfig object = {
  storage1: {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  storage2: {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
}

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for config in items(storageConfig): {
  name: '${config.value.name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: config.value.skuName
  }
  kind: 'StorageV2'
}]

O ciclo cria duas contas de armazenamento. O SKU da conta de armazenamento com o nome a começar pela fabrikam é Premium_LRS.

Utilizar um objeto de dicionário

Ciclo com condição

Para recursos e módulos, pode adicionar uma expressão if com a sintaxe do ciclo para implementar condicionalmente a coleção.

param rgLocation string = resourceGroup().location
param storageCount int = 2
param createNewStorage bool = true

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for i in range(0, storageCount): if(createNewStorage) {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

Para obter mais informações, veja Implementação condicional no Bicep.

Limpar os recursos

Quando os recursos do Azure já não forem necessários, utilize a CLI do Azure ou Azure PowerShell módulo para eliminar o grupo de recursos de início rápido.

resourceGroupName = "{provide-the-resource-group-name}"

az group delete --name $resourceGroupName

Passos seguintes