Início Rápido: criar várias instâncias de recursos no Bicep
Saiba como usar sintaxes for
diferentes 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 usados para definir cópias de módulo, variável, propriedade ou saída. Para saber mais, confira as Loops do Bicep.
Este artigo inclui as seções a seguir:
- usar índice de número inteiro
- usar elementos de matriz
- usar matriz e índice
- usar objeto do dicionário
- loop com condição
Pré-requisitos
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Para configurar seu ambiente para o desenvolvimento do Bicep, confira Instalar ferramentas do Bicep. Depois de concluir essas etapas, você terá o Visual Studio Code e a extensão Bicep. Você também terá a CLI do Azure mais recente ou o módulo do Azure PowerShell mais recente.
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 Bicep para diferentes sintaxes for
. Você pode usar o mesmo método de implantação para implantar e experimentar essas amostras. Se sua implantação falhar, provavelmente será uma das duas causas:
- O nome da conta de armazenamento é muito longo. Os nomes da conta de armazenamento devem ter entre 3 e 24 caracteres e podem conter apenas números e letras minúsculas.
- O nome da conta de armazenamento não é exclusivo. O nome da sua conta de armazenamento deve 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 de número inteiro
Um loop para com um índice é usado na amostra 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ê obterá duas contas de armazenamento semelhantes a:
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), também receberá duas contas de armazenamento:
A saída da amostra anterior mostra como fazer referência aos recursos criados em um loop. A saída deverá ser semelhante a:
"outputs": {
"names": {
"type": "Array",
"value": [
{
"name": "0storage52iyjssggmvue"
},
{
"name": "1storage52iyjssggmvue"
}
]
}
},
Usar elemento de matriz
Você pode fazer loop por meio de uma matriz. A amostra 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:
Você também pode fazer loop através de uma matriz de objetos. O loop não apenas personaliza os nomes de conta 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. A SKU da conta de armazenamento com o nome começando com fabrikam é Premium_LRS.
Usar matriz e índice
Nos mesmos casos, talvez você queira combinar um loop de matriz com um loop de índice. A amostra a seguir mostra como usar a matriz e o número de índice da 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 a amostra anterior, crie duas contas de armazenamento semelhantes a:
Usar objeto de dicionário
Para iterar sobre elementos em um objeto de dicionário, use a função Itens, que converte o objeto em uma matriz. Use a propriedade value
para obter propriedades sobre os 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. A SKU da conta de armazenamento com o nome começando com fabrikam é Premium_LRS.
Loop com condição
Em recursos e módulos, é possível adicionar uma expressão if
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, confira Implantação condicional no Bicep.
Limpar os recursos
Quando os recursos do Azure não forem mais necessários, use o módulo da CLI do Azure ou 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