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:
- Usar índice inteiro
- Usar elementos de matriz
- Usar matriz e índice
- Usar objeto de dicionário
- loop com condição
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:
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:
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:
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 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 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.
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