Modularizar modelos
Ao usar modelos do Azure Resource Manager, é melhor modularizá-los dividindo-os em componentes individuais.
A principal metodologia a ser usada é usando modelos vinculados.
Ele permite que você divida a solução em componentes direcionados e reutilize esses vários elementos em diferentes implantações.
Modelo associado
Adicione um recurso de implantação ao seu modelo principal para vincular um modelo a outro.
"resources": [
{
"apiVersion": "2017-05-10",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
<link-to-external-template>
}
}
]
Modelo aninhado
Você também pode aninhar um modelo dentro do modelo principal, usar a propriedade template e especificar a sintaxe do modelo.
Ele ajuda um pouco a modularização, mas dividir os vários componentes pode resultar em um arquivo principal considerável, já que todos os elementos estão dentro desse único arquivo.
"resources": [
{
"apiVersion": "2017-05-10",
"name": "nestedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageName')]",
"apiVersion": "2015-06-15",
"location": "West US",
"properties": {
"accountType": "Standard_LRS"
}
}
]
}
}
}
]
Nota
Não é possível usar parâmetros ou variáveis definidos no próprio modelo aninhado para modelos aninhados. Você só pode usar parâmetros e variáveis do modelo principal.
As propriedades fornecidas para o recurso de implantação variam com base na vinculação a um modelo externo ou no aninhamento de um modelo embutido no modelo principal.
Modos de implantação
Ao implantar seus recursos usando modelos, você tem três opções:
- validar. Essa opção compila os modelos, valida a implantação, garante que o modelo seja funcional (por exemplo, sem dependências circulares) e corrija a sintaxe.
- modo incremental (padrão). Essa opção implanta apenas o que estiver definido no modelo. Ele não remove ou modifica quaisquer recursos que não estejam definidos no modelo. Por exemplo, se você implantou uma VM via modelo e, em seguida, renomeou a VM no modelo, a primeira VM implantada permanecerá depois que o modelo for executado novamente. É o modo padrão.
- modo completo: o Gerenciador de Recursos exclui recursos que existem no grupo de recursos, mas não são especificados no modelo. Por exemplo, somente os recursos definidos no modelo estarão presentes no grupo de recursos após a implantação do modelo. Como prática recomendada, use esse modo para ambientes de produção para obter idempotência em seus modelos de implantação.
Ao implantar com o PowerShell, para definir o modo de implantação, use o parâmetro Mode, conforme o exemplo de modelo aninhado anteriormente neste tópico.
Nota
Como prática recomendada, use um grupo de recursos por implantação.
Nota
Você só pode usar incremental
o modo de implantação para modelos vinculados e aninhados.
Modelo externo e parâmetros externos
Para vincular a um modelo externo e arquivo de parâmetro, use templateLink e parametersLink.
Ao vincular a um modelo, verifique se o serviço Gerenciador de Recursos pode acessá-lo.
Por exemplo, não é possível especificar um arquivo local ou um arquivo disponível apenas em sua rede local.
Você só pode fornecer um valor de URI (Uniform Resource Identifier) que inclua HTTP ou HTTPS.
Uma opção é colocar o modelo vinculado em uma conta de armazenamento e usar o URI para esse item.
Você também pode fornecer o parâmetro embutido. No entanto, você não pode usar parâmetros embutidos e um link para um arquivo de parâmetro.
O exemplo a seguir usa o parâmetro templateLink :
"resources": [
{
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2018-05-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri":"https://linkedtemplateek1store.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json?sv=2018-03-28&sr=b&sig=dO9p7XnbhGq56BO%2BSW3o9tX7E2WUdIk%2BpF1MTK2eFfs%3D&se=2018-12-31T14%3A32%3A29Z&sp=r"
},
"parameters": {
"storageAccountName":{"value": "[variables('storageAccountName')]"},
"location":{"value": "[parameters('location')]"}
}
}
},
Protegendo um modelo externo
Embora o modelo vinculado deva estar disponível externamente, ele não precisa ser disponibilizado ao público.
Em vez disso, você pode adicionar seu modelo a uma conta de armazenamento privado acessível apenas ao proprietário da conta de armazenamento, criando tokens de assinatura de acesso compartilhado (SAS) para habilitar o acesso durante a implantação.
Você adiciona esse token SAS ao URI do modelo vinculado.
Embora o token seja passado como uma cadeia de caracteres segura, o URI do modelo vinculado, incluindo o token SAS, é registrado nas operações de implantação.
Para limitar a exposição, você também pode definir uma data de expiração para o token.