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:
- utilizar índice inteiro
- utilizar elementos de matriz
- utilizar matriz e índice
- utilizar objeto de dicionário
- ciclo com condição
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:
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:
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:
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 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 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.
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
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários