Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Reduza a repetição de valores compartilhados nos arquivos Bicep. Em vez disso, carregue esses valores de um arquivo JSON compartilhado em seu arquivo Bicep. Ao usar matrizes, concatene os valores compartilhados com valores específicos de implantação no código Bicep.
Contexto e problema
Ao escrever o código Bicep, você pode ter variáveis comuns que reutiliza em um conjunto de arquivos Bicep. Você pode duplicar os valores sempre que declarar o recurso, como copiando e colando os valores entre seus arquivos Bicep. No entanto, essa abordagem é propensa a erros e, quando você precisa fazer alterações, precisa atualizar cada definição de recurso para mantê-la em sincronia com as outras pessoas.
Além disso, quando você trabalha com variáveis definidas como matrizes, você pode ter um conjunto de valores comuns em vários arquivos Bicep e também precisa adicionar valores específicos para o recurso que você está implantando. Quando você mistura as variáveis compartilhadas com as variáveis específicas do recurso, é mais difícil para alguém entender a distinção entre as duas categorias de variáveis.
Solução
Crie um arquivo JSON que inclua as variáveis que você precisa compartilhar. Use a loadJsonContent() função para carregar o arquivo e acessar as variáveis. Para variáveis de matriz, use a concat() função para combinar os valores compartilhados com quaisquer valores personalizados para o recurso específico.
Exemplo 1: nomeando prefixos
Suponha que você tenha vários arquivos Bicep que definem recursos. Você precisa usar um prefixo de nomenclatura consistente para todos os seus recursos.
Defina um arquivo JSON que inclua os prefixos de nomenclatura comuns que se aplicam em toda a sua empresa:
{
"storageAccountPrefix": "stg",
"appServicePrefix": "app"
}
No arquivo Bicep, declare uma variável que importa os prefixos de nomenclatura compartilhados:
var sharedNamePrefixes = loadJsonContent('./shared-prefixes.json')
Ao definir os nomes de recursos, use a interpolação de cadeia de caracteres para concatenar os prefixos de nome compartilhado com sufixos de nome exclusivos:
var appServiceAppName = '${sharedNamePrefixes.appServicePrefix}-myapp-${uniqueString(resourceGroup().id)}'
var storageAccountName = '${sharedNamePrefixes.storageAccountPrefix}myapp${uniqueString(resourceGroup().id)}'
Exemplo 2: regras de grupo de segurança de rede
Suponha que você tenha vários arquivos Bicep que definem seus próprios grupos de segurança de rede (NSG). Você tem um conjunto comum de regras de segurança que devem ser aplicadas a cada NSG e, em seguida, você tem regras específicas do aplicativo que devem ser adicionadas.
Defina um arquivo JSON que inclua as regras de segurança comuns que se aplicam em toda a sua empresa:
{
"securityRules": [
{
"name": "Allow_RDP_from_company_IP_address",
"properties": {
"description": "Allow inbound RDP from the company's IP address range.",
"protocol": "Tcp",
"sourceAddressPrefix": "203.0.113.0/24",
"sourcePortRange": "*",
"destinationAddressPrefix": "VirtualNetwork",
"destinationPortRange": "3389",
"access": "Allow",
"priority": 100,
"direction": "Inbound"
}
},
{
"name": "Allow_VirtualNetwork_to_Storage",
"properties": {
"description": "Allow outbound connections to the Azure Storage service tag.",
"protocol": "Tcp",
"sourceAddressPrefix": "VirtualNetwork",
"sourcePortRange": "*",
"destinationAddressPrefix": "Storage",
"destinationPortRange": "*",
"access": "Allow",
"priority": 100,
"direction": "Outbound"
}
}
// other rules here
]
}
No arquivo Bicep, declare uma variável que importe as regras de segurança compartilhadas:
var sharedRules = loadJsonContent('./shared-rules.json', 'securityRules')
Crie uma matriz de variáveis que represente as regras personalizadas para este NSG específico:
var customRules = [
{
name: 'Allow_Internet_HTTPS_Inbound'
properties: {
description: 'Allow inbound internet connectivity for HTTPS only.'
protocol: 'Tcp'
sourcePortRange: '*'
destinationPortRange: '443'
sourceAddressPrefix: 'Internet'
destinationAddressPrefix: 'VirtualNetwork'
access: 'Allow'
priority: 400
direction: 'Inbound'
}
}
]
Defina o recurso de NSG. Use a concat() função para combinar as duas matrizes e definir a securityRules propriedade:
resource nsg 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
name: nsgName
___location: ___location
properties: {
securityRules: concat(sharedRules, customRules)
}
}
Considerações
- Quando você usa essa abordagem, o arquivo JSON será incluído dentro do modelo arm gerado pelo Bicep. Os modelos do ARM JSON gerados pelo Bicep têm um limite de arquivo de 4 MB, portanto, é importante evitar o uso de arquivos de variáveis compartilhadas grandes.
- Verifique se as matrizes de variáveis compartilhadas não entram em conflito com os valores de matriz especificados em cada arquivo Bicep. Por exemplo, ao usar o padrão de conjunto de configuração para definir grupos de segurança de rede, verifique se você não tem várias regras que definem a mesma prioridade e direção.