Início Rápido: Criar e publicar uma definição de uma Aplicação Gerida do Azure
Este guia de início rápido fornece uma introdução ao trabalho com Aplicativos Gerenciados do Azure. Você cria e publica uma definição de aplicativo gerenciado que é armazenada em seu catálogo de serviços e é destinada a membros da sua organização.
Para publicar um aplicativo gerenciado em seu catálogo de serviços, execute as seguintes tarefas:
- Crie um modelo do Azure Resource Manager (modelo ARM) que define os recursos que são implantados com o aplicativo gerenciado.
- Defina os elementos de interface de utilizador para o portal quando implementar a aplicação gerida.
- Crie um pacote .zip que contenha os arquivos JSON necessários. O arquivo de pacote .zip tem um limite de 120 MB para a definição de aplicativo gerenciado de um catálogo de serviços.
- Publique a definição de aplicativo gerenciado para que ela esteja disponível em seu catálogo de serviços.
Se sua definição de aplicativo gerenciado tiver mais de 120 MB ou se você quiser usar sua própria conta de armazenamento por motivos de conformidade da sua organização, vá para Guia de início rápido: traga seu próprio armazenamento para criar e publicar uma definição de Aplicativo Gerenciado do Azure.
Você pode usar o Bicep para desenvolver uma definição de aplicativo gerenciado, mas ele deve ser convertido em JSON de modelo ARM antes de publicar a definição no Azure. Para obter mais informações, vá para Guia de início rápido: usar o Bicep para criar e publicar uma definição de Aplicativo Gerenciado do Azure.
Você também pode usar o Bicep para implantar uma definição de aplicativo gerenciado do seu catálogo de serviços. Para obter mais informações, vá para Guia de início rápido: usar o Bicep para implantar uma definição de Aplicativo Gerenciado do Azure.
Pré-requisitos
Para concluir este início rápido, você precisa dos seguintes itens:
- Uma conta do Azure com uma assinatura ativa e permissões para recursos do Microsoft Entra, como usuários, grupos ou entidades de serviço. Se você não tiver uma conta, crie uma conta gratuita antes de começar.
- Código do Visual Studio com a extensão mais recente das Ferramentas do Azure Resource Manager. Para arquivos Bicep, instale a extensão Bicep para Visual Studio Code.
- Instale a versão mais recente do Azure PowerShell ou da CLI do Azure.
Criar o modelo ARM
Cada definição de aplicação gerida inclui um ficheiro denominado mainTemplate.json. O modelo define os recursos do Azure a serem implantados e não é diferente de um modelo ARM regular.
Abra o Visual Studio Code, crie um arquivo com o nome que diferencia maiúsculas de minúsculas mainTemplate.json e salve-o.
Adicione o JSON a seguir e salve o arquivo. Ele define os recursos para implantar um Serviço de Aplicativo, um plano do Serviço de Aplicativo e uma conta de armazenamento para o aplicativo. Essa conta de armazenamento não é usada para armazenar a definição de aplicativo gerenciado.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"appServicePlanName": {
"type": "string",
"maxLength": 40,
"metadata": {
"description": "App Service plan name."
}
},
"appServiceNamePrefix": {
"type": "string",
"maxLength": 47,
"metadata": {
"description": "App Service name prefix."
}
},
"storageAccountNamePrefix": {
"type": "string",
"maxLength": 11,
"metadata": {
"description": "Storage account name prefix."
}
},
"storageAccountType": {
"type": "string",
"allowedValues": [
"Premium_LRS",
"Standard_LRS",
"Standard_GRS"
],
"metadata": {
"description": "Storage account type allowed values"
}
}
},
"variables": {
"appServicePlanSku": "F1",
"appServicePlanCapacity": 1,
"appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'), uniqueString(resourceGroup().id))]",
"storageAccountName": "[format('{0}{1}', parameters('storageAccountNamePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2022-09-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('appServicePlanSku')]",
"capacity": "[variables('appServicePlanCapacity')]"
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2022-09-01",
"name": "[variables('appServiceName')]",
"location": "[parameters('location')]",
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
"httpsOnly": true,
"siteConfig": {
"appSettings": [
{
"name": "AppServiceStorageConnectionString",
"value": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};Key={2}', variables('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2023-01-01').keys[0].value)]"
}
]
}
},
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
},
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot",
"allowSharedKeyAccess": false,
"minimumTlsVersion": "TLS1_2"
}
}
],
"outputs": {
"appServicePlan": {
"type": "string",
"value": "[parameters('appServicePlanName')]"
},
"appServiceApp": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2022-09-01').defaultHostName]"
},
"storageAccount": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2023-01-01').primaryEndpoints.blob]"
}
}
}
Defina a sua experiência no portal
Como editor, você define a experiência do portal para criar o aplicativo gerenciado. O arquivo createUiDefinition.json gera a interface do usuário do portal. Você define como os usuários fornecem entrada para cada parâmetro usando elementos de controle, como menus suspensos e caixas de texto.
Neste exemplo, a interface do usuário solicita que você insira o prefixo do nome do Serviço de Aplicativo, o nome do plano do Serviço de Aplicativo, o prefixo da conta de armazenamento e o tipo de conta de armazenamento. Durante a implantação, as variáveis no mainTemplate.json usam a uniqueString
função para acrescentar uma cadeia de caracteres de 13 caracteres aos prefixos de nome para que os nomes sejam globalmente exclusivos no Azure.
Abra o Visual Studio Code, crie um arquivo com o nome que diferencia maiúsculas de minúsculas createUiDefinition.json e salve-o.
Adicione o seguinte código JSON ao arquivo e salve-o.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{}
],
"steps": [
{
"name": "webAppSettings",
"label": "Web App settings",
"subLabel": {
"preValidation": "Configure the web app settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "appServicePlanName",
"type": "Microsoft.Common.TextBox",
"label": "App Service plan name",
"placeholder": "App Service plan name",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with a maximum of 40 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{1,40}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a maximum of 40 characters."
},
"visible": true
},
{
"name": "appServiceName",
"type": "Microsoft.Common.TextBox",
"label": "App Service name prefix",
"placeholder": "App Service name prefix",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with minimum of 2 characters and maximum of 47 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{2,47}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a minimum of 2 characters and maximum of 47 characters."
},
"visible": true
}
]
},
{
"name": "storageConfig",
"label": "Storage settings",
"subLabel": {
"preValidation": "Configure the storage settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "storageAccounts",
"type": "Microsoft.Storage.MultiStorageAccountCombo",
"label": {
"prefix": "Storage account name prefix",
"type": "Storage account type"
},
"toolTip": {
"prefix": "Enter maximum of 11 lowercase letters or numbers.",
"type": "Available choices are Standard_LRS, Standard_GRS, and Premium_LRS."
},
"defaultValue": {
"type": "Standard_LRS"
},
"constraints": {
"allowedTypes": [
"Premium_LRS",
"Standard_LRS",
"Standard_GRS"
]
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
"appServiceNamePrefix": "[steps('webAppSettings').appServiceName]",
"storageAccountNamePrefix": "[steps('storageConfig').storageAccounts.prefix]",
"storageAccountType": "[steps('storageConfig').storageAccounts.type]"
}
}
}
Para saber mais, consulte Introdução ao CreateUiDefinition.
Empacote os ficheiros
Adicione os dois arquivos a um arquivo de pacote chamado app.zip. Os dois arquivos devem estar no nível raiz do arquivo .zip . Se os arquivos estiverem em uma pasta, ao criar a definição de aplicativo gerenciado, você receberá um erro informando que os arquivos necessários não estão presentes.
Carregue app.zip em uma conta de armazenamento do Azure para que você possa usá-lo ao implantar a definição do aplicativo gerenciado. O nome da conta de armazenamento deve ser globalmente exclusivo no Azure e o comprimento deve ser de 3 a 24 caracteres com apenas letras minúsculas e números. No comando, substitua o espaço reservado <pkgstorageaccountname>
, incluindo os colchetes angulares (<>
), pelo nome exclusivo da conta de armazenamento.
No Visual Studio Code, abra um novo terminal do PowerShell e entre na sua assinatura do Azure.
Connect-AzAccount
O comando abre seu navegador padrão e solicita que você entre no Azure. Para obter mais informações, vá para Entrar com o Azure PowerShell.
New-AzResourceGroup -Name packageStorageGroup -Location westus
$pkgstorageparms = @{
ResourceGroupName = "packageStorageGroup"
Name = "<pkgstorageaccountname>"
Location = "westus"
SkuName = "Standard_LRS"
Kind = "StorageV2"
MinimumTlsVersion = "TLS1_2"
AllowBlobPublicAccess = $true
AllowSharedKeyAccess = $false
}
$pkgstorageaccount = New-AzStorageAccount @pkgstorageparms
A $pkgstorageparms
variável usa o splatting do PowerShell para melhorar a legibilidade dos valores de parâmetro usados no comando para criar a nova conta de armazenamento. O splatting é usado em outros comandos do PowerShell que usam vários valores de parâmetro.
Depois de criar a conta de armazenamento, adicione a atribuição de função Storage Blob Data Contributor ao escopo da conta de armazenamento. Atribua acesso à sua conta de utilizador do Microsoft Entra. Dependendo do seu nível de acesso no Azure, você pode precisar de outras permissões atribuídas pelo administrador. Para obter mais informações, veja Atribuir uma função do Azure para acesso aos dados de blobs.
Depois de adicionar a função à conta de armazenamento, leva alguns minutos para se tornar ativa no Azure. Em seguida, você pode criar o contexto necessário para criar o contêiner e carregar o arquivo.
$pkgstoragecontext = New-AzStorageContext -StorageAccountName $pkgstorageaccount.StorageAccountName -UseConnectedAccount
New-AzStorageContainer -Name appcontainer -Context $pkgstoragecontext -Permission blob
$blobparms = @{
File = "app.zip"
Container = "appcontainer"
Blob = "app.zip"
Context = $pkgstoragecontext
}
Set-AzStorageBlobContent @blobparms
Criar a definição da aplicação gerida
Nesta seção, você obtém informações de identidade do Microsoft Entra ID, cria um grupo de recursos e implanta a definição de aplicativo gerenciado.
Obter ID de grupo e ID de definição de função
A próxima etapa é selecionar um usuário, grupo de segurança ou aplicativo para gerenciar os recursos para o cliente. Essa identidade tem permissões no grupo de recursos gerenciado de acordo com a função atribuída. A função pode ser qualquer função interna do Azure, como Proprietário ou Colaborador.
Este exemplo usa um grupo de segurança e sua conta do Microsoft Entra deve ser membro do grupo. Para obter a ID do objeto do grupo, substitua o espaço reservado <managedAppDemo>
, incluindo os colchetes angulares (<>
), pelo nome do grupo. Você usa o valor dessa variável ao implantar a definição de aplicativo gerenciado.
Para criar um novo grupo do Microsoft Entra, vá para Gerenciar grupos do Microsoft Entra e associação ao grupo.
$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id
Em seguida, obtenha a ID de definição de função da função interna do Azure que você deseja conceder acesso ao usuário, grupo ou aplicativo. Você usa o valor dessa variável ao implantar a definição de aplicativo gerenciado.
$roleid=(Get-AzRoleDefinition -Name Owner).Id
Publicar a definição de aplicativo gerenciado
Crie um grupo de recursos para sua definição de aplicativo gerenciado.
New-AzResourceGroup -Name appDefinitionGroup -Location westus
O blob
comando cria uma variável para armazenar a URL do pacote .zip arquivo. Essa variável é usada no comando que cria a definição de aplicativo gerenciado.
$blob = Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $pkgstoragecontext
$publishparms = @{
Name = "sampleManagedApplication"
Location = "westus"
ResourceGroupName = "appDefinitionGroup"
LockLevel = "ReadOnly"
DisplayName = "Sample managed application"
Description = "Sample managed application that deploys web resources"
Authorization = "${principalid}:$roleid"
PackageFileUri = $blob.ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri
}
New-AzManagedApplicationDefinition @publishparms
Após a conclusão do comando, terá uma definição de aplicação gerida no seu grupo de recursos.
Alguns dos parâmetros utilizados no exemplo anterior são:
ResourceGroupName
: O nome do grupo de recursos onde a definição de aplicativo gerenciado é criada.LockLevel
: OlockLevel
no grupo de recursos gerenciados impede que o cliente execute operações indesejáveis nesse grupo de recursos. Atualmente,ReadOnly
é o único nível de bloqueio suportado.ReadOnly
Especifica que o cliente só pode ler os recursos presentes no grupo de recursos gerenciados. As identidades de editor às quais é concedido acesso ao grupo de recursos gerenciados são isentas do nível de bloqueio.Authorization
: Descreve a ID principal e a ID de definição de função que são usadas para conceder permissão ao grupo de recursos gerenciados."${principalid}:$roleid"
ou você pode usar chaves para cada variável"${principalid}:${roleid}"
.- Use uma vírgula para separar vários valores:
"${principalid1}:$roleid1", "${principalid2}:$roleid2"
.
PackageFileUri
: O local de um arquivo de pacote de .zip que contém os arquivos necessários.
Confirmar que os utilizadores podem ver a definição
Tem acesso à definição de aplicação gerida, mas deve verificar se outros utilizadores na sua organização podem aceder à mesma. Conceda-lhes, pelo menos, a função de Leitor na definição. Eles podem ter herdado esse nível de acesso da assinatura ou do grupo de recursos. Para verificar quem tem acesso à definição e adicionar usuários ou grupos, consulte Atribuir funções do Azure usando o portal do Azure.
Clean up resources (Limpar recursos)
Se você vai implantar a definição, continue com a seção Próximas etapas que vincula ao artigo para implantar a definição.
Se tiver terminado a definição de aplicativo gerenciado, você poderá excluir os grupos de recursos criados chamados packageStorageGroup e appDefinitionGroup.
O comando solicita que você confirme que deseja remover o grupo de recursos.
Remove-AzResourceGroup -Name packageStorageGroup
Remove-AzResourceGroup -Name appDefinitionGroup
Próximos passos
Você publicou a definição de aplicativo gerenciado. A próxima etapa é aprender a implantar uma instância dessa definição.
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