Início Rápido: usar o Bicep para implantar uma definição de Aplicativo Gerenciado do Azure

Esse início rápido descreve como usar o Bicep para implantar uma definição de Aplicativo Gerenciado do Azure a partir do catálogo de serviços. As definições em seu catálogo de serviços estão disponíveis para os membros da sua organização.

Para implantar uma definição de aplicativo gerenciado do catálogo de serviços, execute as seguintes tarefas:

  • Use o Bicep para desenvolver um modelo que implanta uma definição de aplicativo gerenciado.
  • Crie um arquivo de parâmetro para a implantação.
  • Implante a definição de aplicativo gerenciado do catálogo de serviços.

Pré-requisitos

Para concluir as tarefas neste artigo, você precisa dos seguintes itens:

Obter definição de aplicativo gerenciado

Para obter a definição do aplicativo gerenciado com o Azure PowerShell, execute os comandos a seguir.

No Visual Studio Code, abra um novo terminal do PowerShell e entre em sua assinatura do Azure.

Connect-AzAccount

O comando abre o navegador padrão e solicita que você entre no Azure. Para obter mais informações, vá para Entrar com o Azure PowerShell.

Em Azure PowerShell, obtenha a definição do aplicativo gerenciado. Neste exemplo, use o nome do grupo de recursos bicepDefinitionRG que foi criado quando você implantou a definição do aplicativo gerenciado.

Get-AzManagedApplicationDefinition -ResourceGroupName bicepDefinitionRG

Get-AzManagedApplicationDefinition lista todas as definições disponíveis no grupo de recursos especificado, como sampleBicepManagedApplication.

O comando a seguir analisa a saída para mostrar apenas o nome da definição e o nome do grupo de recursos. Você usa os nomes quando implanta o aplicativo gerenciado.

Get-AzManagedApplicationDefinition -ResourceGroupName bicepDefinitionRG | Select-Object -Property Name, ResourceGroupName

Criar o arquivo Bicep

Abra o Visual Studio Code e crie um nome de arquivo deployServiceCatalog.bicep. Copie e cole o código a seguir no arquivo e salve-o.

@description('Region where the resources are deployed.')
param location string = resourceGroup().location

@description('Resource group name where the definition is stored.')
param definitionRG string

@description('Name of the service catalog definition.')
param definitionName string

// Parameters for the managed application's resource deployment
@description('Name of the managed application.')
param managedAppName string

@description('Name for the managed resource group.')
param mrgName string

@maxLength(40)
@description('Service plan name with maximum 40 alphanumeric characters and hyphens. Must be unique within a resource group in your subscription.')
param appServicePlanName string

@maxLength(47)
@description('Globally unique across Azure. Maximum of 47 alphanumeric characters or hyphens.')
param appServiceNamePrefix string

@maxLength(11)
@description('Use only lowercase letters and numbers and a maximum of 11 characters.')
param storageAccountNamePrefix string

@allowed([
  'Premium_LRS'
  'Standard_LRS'
  'Standard_GRS'
])
@description('The options are Premium_LRS, Standard_LRS, or Standard_GRS')
param storageAccountType string

@description('Resource ID for the managed application definition.')
var appResourceId = resourceId('${definitionRG}', 'Microsoft.Solutions/applicationdefinitions', '${definitionName}')

@description('Creates the path for the managed resource group. The resource group is created during deployment.')
var mrgId = '${subscription().id}/resourceGroups/${mrgName}'

resource bicepServiceCatalogApp 'Microsoft.Solutions/applications@2021-07-01' = {
  name: managedAppName
  kind: 'ServiceCatalog'
  location: location
  properties: {
    applicationDefinitionId: appResourceId
    managedResourceGroupId: mrgId
    parameters: {
      appServicePlanName: {
        value: appServicePlanName
      }
      appServiceNamePrefix: {
        value: appServiceNamePrefix
      }
      storageAccountNamePrefix: {
        value: storageAccountNamePrefix
      }
      storageAccountType: {
        value: storageAccountType
      }
    }
  }
}

Para obter mais informações sobre o tipo de recurso, acesse Microsoft.Solutions/applications.

Criar o arquivo de parâmetros

Abra o Visual Studio Code e crie um arquivo de parâmetro nomeado deployServiceCatalog.parameters.json. Copie e cole o código a seguir no arquivo e salve-o.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "definitionName": {
      "value": "sampleBicepManagedApplication"
    },
    "definitionRG": {
      "value": "bicepDefinitionRG"
    },
    "managedAppName": {
      "value": "sampleBicepManagedApp"
    },
    "mrgName": {
      "value": "<placeholder for managed resource group name>"
    },
    "appServicePlanName": {
      "value": "demoAppServicePlan"
    },
    "appServiceNamePrefix": {
      "value": "demoApp"
    },
    "storageAccountNamePrefix": {
      "value": "demostg1234"
    },
    "storageAccountType": {
      "value": "Standard_LRS"
    }
  }
}

Você precisa fornecer vários parâmetros para implantar o aplicativo gerenciado:

Parâmetro Valor
definitionName Nome da definição do catálogo de serviços. Esse exemplo usa sampleBicepManagedApplication.
definitionRG Nome do grupo de recursos no qual a definição é armazenada. Esse exemplo usa bicepDefinitionRG.
managedAppName Nome do aplicativo gerenciado implantado. Esse exemplo usa sampleBicepManagedApp.
mrgName Nome exclusivo para o grupo de recursos gerenciados que contém os recursos implantados do aplicativo. O grupo de recursos é criado quando você implanta o aplicativo gerenciado. Para criar um nome de grupo de recursos gerenciados, você pode executar os comandos que seguem esta lista de parâmetros.
appServicePlanName Crie um nome do plano. Máximo de 40 caracteres alfanuméricos e hifens. Por exemplo, demoAppServicePlan. Os nomes dos Planos dos Serviços de Aplicativo devem ser exclusivos dentro de um grupo de recursos em sua assinatura.
appServiceNamePrefix Crie um prefixo para o nome do plano. Máximo de 47 caracteres alfanuméricos ou hifens. Por exemplo, demoApp. Durante a implantação, o prefixo é concatenado com uma cadeia de caracteres exclusiva para criar um nome global que é exclusivo em todo o Azure.
storageAccountNamePrefix Use apenas letras minúsculas e números e um máximo de 11 caracteres. Por exemplo, demostg1234. Durante a implantação, o prefixo é concatenado com uma cadeia de caracteres exclusiva para criar um nome globalmente exclusivo em todo o Azure.
storageAccountType As opções são Premium_LRS, Standard_LRS e Standard_GRS.

Você pode executar os comandos a seguir para criar o nome do grupo de recursos gerenciados.

$mrgprefix = 'mrg-sampleBicepManagedApplication-'
$mrgtimestamp = Get-Date -UFormat "%Y%m%d%H%M%S"
$mrgname = $mrgprefix + $mrgtimestamp
$mrgname

As variáveis $mrgprefix e $mrgtimestamp são concatenadas e armazenadas na variável $mrgname. O valor da variável está no formato mrg-sampleBicepManagedApplication-20230512103059. Você usará o valor de variável $mrgname ao implantar a definição de aplicativo gerenciado.

Implantar o aplicativo gerenciado

Use o Azure PowerShell ou a CLI do Azure para criar um grupo de recursos e implantar o aplicativo gerenciado.

New-AzResourceGroup -Name bicepAppRG -Location westus3

New-AzResourceGroupDeployment `
  -ResourceGroupName bicepAppRG `
  -TemplateFile deployServiceCatalog.bicep `
  -TemplateParameterFile deployServiceCatalog.parameters.json

Sua implantação pode exibir um aviso de linter do Bicep de que a propriedade managedResourceGroupId espera uma ID do recurso. Como o grupo de recursos gerenciados é criado durante a implantação, não há uma ID do recurso disponível para a propriedade.

Exibir os resultados

Depois que o aplicativo gerenciado do catálogo de serviços tiver sido implantado, você terá dois novos grupos de recursos. Um grupo de recursos contém o aplicativo gerenciado. O outro grupo de recursos contém os recursos gerenciados que foram implantados. Neste exemplo, um Serviço de Aplicativo, Plano do Serviço de Aplicativo e uma conta de armazenamento.

Aplicativo gerenciado

Depois que a implantação for concluída, você poderá verificar o status do aplicativo gerenciado.

Execute o comando a seguir para verificar o status do aplicativo gerenciado.

Get-AzManagedApplication -Name sampleBicepManagedApp -ResourceGroupName bicepAppRG

Expanda as propriedades para facilitar a leitura das informações Properties.

Get-AzManagedApplication -Name sampleBicepManagedApp -ResourceGroupName bicepAppRG | Select-Object -ExpandProperty Properties

Recursos gerenciados

Você pode exibir os recursos implantados no grupo de recursos gerenciados.

Para exibir os recursos do grupo de recursos gerenciados, execute o comando a seguir. Você criou a variável $mrgname quando criou os parâmetros.

Get-AzResource -ResourceGroupName $mrgname

Para exibir todas as atribuições de função para o grupo de recursos gerenciados.

Get-AzRoleAssignment -ResourceGroupName $mrgname

A definição de aplicativo gerenciado que você criou nos artigos de início rápido usou um grupo com a atribuição de função Proprietário. Você pode exibir o grupo com o comando a seguir.

Get-AzRoleAssignment -ResourceGroupName $mrgname -RoleDefinitionName Owner

Você também pode listar as atribuições de negação para o grupo de recursos gerenciados.

Get-AzDenyAssignment -ResourceGroupName $mrgname

Limpar recursos

Ao terminar com o aplicativo gerenciado, você poderá excluir os grupos de recursos e isso remove todos os recursos que você criou. Por exemplo, você criou o bicepAppRG dos grupos de recursos e um grupo de recursos gerenciados com o prefixo mrg-bicepManagedApplication.

Quando você exclui o grupo de recursos bicepAppRG, o aplicativo gerenciado, o grupo de recursos gerenciados e todos os recursos do Azure são excluídos.

O comando solicita que você confirme se deseja remover o grupo de recursos.

Remove-AzResourceGroup -Name bicepAppRG

Se você quiser excluir a definição do aplicativo gerenciado, exclua os grupos de recursos que você criou nomeados packageStorageRG e bicepDefinitionRG.

Próximas etapas