Padrão do conjunto de configuração
Em vez de definir muitos parâmetros individuais, crie conjuntos predefinidos de valores. Durante a implementação, selecione o conjunto de valores a utilizar.
Contexto e problema
Um único ficheiro Bicep define frequentemente muitos recursos. Cada recurso poderá ter de utilizar uma configuração diferente consoante o ambiente no qual o está a implementar. Por exemplo, pode criar um ficheiro Bicep que implementa um plano e uma aplicação Serviço de Aplicações e uma conta de armazenamento. Cada um destes recursos tem várias opções que afetam o seu custo, disponibilidade e resiliência. Para ambientes de produção, quer utilizar um conjunto de configuração que dê prioridade à elevada disponibilidade e resiliência. Para ambientes de não produção, quer utilizar um conjunto diferente de configuração que priorize a redução de custos.
Pode criar parâmetros para cada definição de configuração, mas isto tem algumas desvantagens:
- Esta abordagem cria um encargo para os utilizadores do modelo, uma vez que precisam de compreender os valores a utilizar para cada recurso e o impacto da definição de cada parâmetro.
- O número de parâmetros no seu modelo aumenta com cada novo recurso que definir.
- Os utilizadores podem selecionar combinações de valores de parâmetros que não tenham sido testados ou que não funcionem corretamente.
Solução
Crie um único parâmetro para especificar o tipo de ambiente. Utilize uma variável para selecionar automaticamente a configuração de cada recurso com base no valor do parâmetro.
Nota
Por vezes, esta abordagem chama-se dimensionamento de t-shirt. Quando compra uma t-shirt, não tem muitas opções para o seu comprimento, largura, mangas, etc. Basta escolher entre tamanhos pequenos, médios e grandes e o estruturador de t-shirt predefiniu essas medidas com base nesse tamanho.
Exemplo
Suponha que tem um modelo que pode ser implementado em dois tipos de ambiente: não produção e produção. Consoante o tipo de ambiente, a configuração de que precisa é diferente:
Propriedade | Ambientes de não produção | Ambientes de produção |
---|---|---|
Serviço de Aplicações plano | ||
Nome do SKU | S2 | P2V3 |
Capacidade (número de instâncias) | 1 | 3 |
Serviço de Aplicações aplicação | ||
AlwaysOn | Desativado | Ativado |
Conta de armazenamento | ||
Nome do SKU | Standard_LRS | Standard_ZRS |
Pode utilizar o padrão do conjunto de configuração para este modelo.
Aceite um único parâmetro que indique o tipo de ambiente, como produção ou não produção. Utilize o @allowed
decorador de parâmetros para garantir que os utilizadores do modelo apenas fornecem valores esperados:
@allowed([
'Production'
'NonProduction'
])
param environmentType string = 'NonProduction'
Em seguida, crie uma variável de mapa, que é um objeto que define a configuração específica consoante o tipo de ambiente. Repare que a variável tem dois objetos com o nome Production
e NonProduction
. Estes nomes correspondem aos valores permitidos para o parâmetro no exemplo anterior:
var environmentConfigurationMap = {
Production: {
appServicePlan: {
sku: {
name: 'P2V3'
capacity: 3
}
}
appServiceApp: {
alwaysOn: false
}
storageAccount: {
sku: {
name: 'Standard_ZRS'
}
}
}
NonProduction: {
appServicePlan: {
sku: {
name: 'S2'
capacity: 1
}
}
appServiceApp: {
alwaysOn: false
}
storageAccount: {
sku: {
name: 'Standard_LRS'
}
}
}
}
Quando definir os recursos, utilize o mapa de configuração para definir as propriedades do recurso:
resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
name: appServicePlanName
location: location
sku: environmentConfigurationMap[environmentType].appServicePlan.sku
}
resource appServiceApp 'Microsoft.Web/sites@2022-09-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
siteConfig: {
alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
}
}
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
kind: 'StorageV2'
sku: environmentConfigurationMap[environmentType].storageAccount.sku
}
Considerações
- Na variável de mapa, considere agrupar as propriedades por recurso para simplificar a respetiva definição.
- Na variável de mapa, pode definir ambos os valores de propriedade individuais (como a
alwaysOn
propriedade no exemplo) ou variáveis de objeto que definem uma propriedade de objeto (como as propriedades do SKU no exemplo). - Considere utilizar um conjunto de configuração com condições de recursos. Isto permite que o código do Bicep implemente determinados recursos em ambientes específicos e não noutros.
Passos seguintes
Saiba mais sobre o padrão de ficheiro de variável partilhada.
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