Implantar uma especificação de modelo

Concluído

Depois de criar e publicar sua especificação de modelo, você pode implantá-la. Nesta unidade, você aprenderá sobre as maneiras de implantar uma especificação de modelo.

Criar uma implantação usando uma especificação de modelo

Para implantar uma especificação de modelo em um grupo de recursos, use o mesmo cmdlet New-AzResourceGroupDeployment com o qual você já está familiarizado. Em vez de especificar um arquivo de modelo, especifique a ID de recurso de uma especificação de modelo, conforme mostrado neste exemplo:

New-AzResourceGroupDeployment `
  -TemplateSpecId '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/SharedTemplates/providers/Microsoft.Resources/templateSpecs/StorageWithoutSAS'

Embora as especificações de modelo tenham que ser criadas em um grupo de recursos, você pode implantá-las em assinaturas, grupos de gerenciamento ou até mesmo em locatários usando estes cmdlets:

Para implantação nesse escopo: Use este cmdlet do PowerShell:
Resource group New-AzResourceGroupDeployment
Subscription New-AzSubscriptionDeployment
Grupo de gerenciamento New-AzManagementGroupDeployment
Locatário New-AzTenantDeployment

Cada um desses cmdlets aceita o parâmetro -TemplateSpecId para iniciar uma implantação de especificação de modelo em um desses escopos.

Para implantar uma especificação de modelo em um grupo de recursos, use o mesmo comando az deployment group create com o qual você já está familiarizado. Em vez de especificar um arquivo de modelo, especifique a ID de recurso de uma especificação de modelo, conforme mostrado neste exemplo:

az deployment group create \
  --template-spec "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/SharedTemplates/providers/Microsoft.Resources/templateSpecs/StorageWithoutSAS"

Embora as especificações de modelo tenham que ser criadas em um grupo de recursos, você pode implantá-las em assinaturas, grupos de gerenciamento ou até mesmo em locatários usando estes comandos:

Para implantação nesse escopo: Execute este comando da CLI do Azure:
Resource group az deployment group create
Subscription az deployment sub create
Grupo de gerenciamento az deployment mg create
Locatário az deployment tenant create

Cada um desses comandos aceita o argumento --template-spec para iniciar uma implantação de especificação de modelo em um desses escopos.

Usar uma especificação de modelo como uma implantação vinculada

Para usar uma especificação de modelo de dentro de outro modelo do ARM (Azure Resource Manager), crie uma implantação que use essa especificação de modelo. Esse tipo de implantação é chamado de implantação vinculada porque você está vinculando a um modelo de implantação especificado externamente.

No Azure, uma implantação é um recurso que tem o tipo de recurso Microsoft.Resources/deployments. Ao implantar um modelo do ARM, você está criando um recurso de implantação. O mesmo conceito se aplica quando você implanta uma especificação de modelo, desta forma:

{
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2020-10-01",
  "name": "createStorage",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "id": "[resourceId('Microsoft.Resources/templateSpecs/versions', variables('templateSpecName'), variables('templateSpecVersion'))]"
    }
  }
}

Quando você tiver parâmetros para fornecer à implantação de especificação de modelo, use a propriedade parameters:

{
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2020-10-01",
  "name": "createStorage",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "id": "[resourceId('Microsoft.Resources/templateSpecs/versions', variables('templateSpecName'), variables('templateSpecVersion'))]"
    },
    "parameters": {
      "storageAccountName": {
        "value": "[parameters('storageAccountName')]"
      }
    }
  }
}

Usar uma especificação de modelo como um módulo do Bicep

Você pode usar uma especificação de modelo como um módulo dentro de um arquivo do Bicep:

module storageAccountTemplateSpec 'ts:f0750bbe-ea75-4ae5-b24d-a92ca601da2c/sharedTemplates/StorageWithoutSAS:1.0' = {
  name: 'storageAccountTemplateSpec'
}

Observe que o caminho do módulo usa um formato especial:

Diagram showing the components of the template spec path.

Há três componentes para o caminho do módulo, separados pelo caractere dois-pontos (:):

  • Esquema: o Bicep dá suporte a vários tipos de módulo, que são chamados de esquemas. Ao usar uma especificação de modelo como um módulo, você usa ts como o esquema.
  • ID da assinatura, nome do grupo de recursos e nome da especificação do modelo: Esses valores devem especificar o local do recurso de especificação de modelo que você publicou anteriormente. Use barras (/) para separar a ID da assinatura, o nome do grupo de recursos e o nome da especificação de modelo. Essa seção do caminho do módulo não é a ID de recurso completa da especificação de modelo, são apenas alguns dos componentes da ID do recurso.
  • Versão: a versão da especificação de modelo precisa ser incluída.

Observação

Não é possível usar variáveis, parâmetros ou interpolação de cadeia de caracteres ao especificar o caminho para um módulo. O caminho completo da especificação de modelo precisa ser salvo em seu arquivo do Bicep.

Quando você tiver parâmetros para fornecer à especificação de modelo, use a propriedade params:

module storageAccountTemplateSpec 'ts:f0750bbe-ea75-4ae5-b24d-a92ca601da2c/sharedTemplates/StorageWithoutSAS:1.0' = {
  name: 'storageAccountTemplateSpec'
  params: {
    storageAccountName: storageAccountName
  }
}

O arquivo da especificação de modelo é baixado e copiado (traduzido) para o seu modelo JSON do ARM quando o arquivo do Bicep é criado. Normalmente, essa operação acontece quando você implanta o arquivo Bicep, mas também pode usar as ferramentas do Bicep para transpilar explicitamente executando o comando bicep build.