Partilhar via


Guia de início rápido: criar várias instâncias de recursos no Bicep

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

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 seu ambiente para o desenvolvimento do Bicep, consulte Instalar ferramentas do Bicep. Depois de concluir essas etapas, você terá o Visual Studio Code e a extensão Bicep. Você também tem a CLI do Azure mais recente ou o módulo mais recente do Azure PowerShell.

Criar uma única instância

Nesta seção, você define um arquivo Bicep para criar uma conta de armazenamento e, em seguida, implanta o arquivo Bicep. As seções subsequentes fornecem as amostras de Bicep para diferentes for sintaxes. Você pode usar o mesmo método de implantação para implantar e experimentar esses exemplos. Se a implantação falhar, é provável que seja uma das duas causas:

  • O nome da conta de armazenamento é muito 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 arquivo Bicep define uma conta de armazenamento:

param rgLocation string = resourceGroup().location

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

Salve o arquivo Bicep localmente e use a CLI do Azure ou o Azure PowerShell para implantar o arquivo 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

Usar índice inteiro

Um loop for com um índice é usado no exemplo a seguir para criar duas contas de armazenamento:

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

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-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 de índice é usado como parte do nome da conta de armazenamento. Depois de implantar o arquivo Bicep, você obtém duas contas de armazenamento semelhantes a:

Use 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 loop será executado. Portanto, se você alterá-lo para intervalo(3,2), você também obterá duas contas de armazenamento:

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

A saída do exemplo anterior mostra como fazer referência aos recursos criados em um loop. O resultado é semelhante a:

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

Usar elementos de matriz

Você pode fazer um loop através de uma matriz. O exemplo a seguir mostra uma matriz de cadeias de caracteres.

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

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

O loop usa todas as cadeias de caracteres na matriz como parte dos nomes de conta de armazenamento. Nesse caso, ele cria duas contas de armazenamento:

Usar uma matriz de cadeias de caracteres

Você também pode fazer loop através de uma matriz de objetos. O loop não apenas personaliza os nomes das contas de armazenamento, mas também configura as SKUs.

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

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

O loop cria duas contas de armazenamento. O SKU da conta de armazenamento com o nome começando com fabrikam é Premium_LRS.

Usar uma matriz de cadeias de caracteres

Usar matriz e índice

Nos mesmos casos, convém combinar um loop de matriz com um loop de índice. O exemplo a seguir mostra como usar a matriz e o número de índice para a convenção de nomenclatura.

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

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

Depois de implantar o exemplo anterior, você cria duas contas de armazenamento semelhantes a:

Usar uma matriz de cadeias de caracteres e número de índice

Usar objeto de dicionário

Para iterar sobre elementos em um objeto de dicionário, use a função items, que converte o objeto em uma matriz. Use 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@2023-04-01' = [for config in items(storageConfig): {
  name: '${config.value.name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: config.value.skuName
  }
  kind: 'StorageV2'
}]

O loop cria duas contas de armazenamento. O SKU da conta de armazenamento com o nome começando com fabrikam é Premium_LRS.

Usar um objeto de dicionário

Loop com condição

Para recursos e módulos, você pode adicionar uma if expressão com a sintaxe de loop para implantar condicionalmente a coleção.

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

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-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, consulte Implantação condicional no Bicep.

Clean up resources (Limpar recursos)

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

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

az group delete --name $resourceGroupName

Próximos passos