Quickstart: Criar e publicar uma definição da aplicação geridaQuickstart: Create and publish a managed application definition

Este quickstart fornece uma introdução ao trabalho com aplicações geridas Azure.This quickstart provides an introduction to working with Azure Managed Applications. Pode criar e publicar uma aplicação gerida destinada aos membros da sua organização.You can create and publish a managed application that is intended for members of your organization.

Para publicar uma aplicação gerida no seu catálogo de serviços, deve:To publish a managed application to your service catalog, you must:

  • Criar um modelo que define os recursos a implementar com a aplicação gerida.Create a template that defines the resources to deploy with the managed application.
  • Defina os elementos de interface de utilizador para o portal quando implementar a aplicação gerida.Define the user interface elements for the portal when deploying the managed application.
  • Crie um pacote .zip que contenha os ficheiros de modelos necessários.Create a .zip package that contains the required template files.
  • Decida que utilizador, grupo ou aplicação precisa de aceder ao grupo de recursos na subscrição do utilizador.Decide which user, group, or application needs access to the resource group in the user's subscription.
  • Crie a definição de aplicação gerida que aponta para o pacote .zip e solicita acesso à identidade.Create the managed application definition that points to the .zip package and requests access for the identity.

Criar um modelo do ARMCreate the ARM template

Cada definição de aplicação gerida inclui um ficheiro denominado mainTemplate.json.Every managed application definition includes a file named mainTemplate.json. Nele, defina os recursos do Azure a implementar.In it, you define the Azure resources to deploy. O modelo não é diferente de um modelo ARM regular.The template is no different than a regular ARM template.

Crie um ficheiro denominado mainTemplate.json.Create a file named mainTemplate.json. O nome é sensível a maiúsculas e minúsculas.The name is case-sensitive.

Adicione o seguinte JSON ao ficheiro.Add the following JSON to your file. Define os parâmetros para criar uma conta de armazenamento e especifica as propriedades da conta de armazenamento.It defines the parameters for creating a storage account, and specifies the properties for the storage account.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountNamePrefix": {
      "type": "string"
    },
    "storageAccountType": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('storageAccountNamePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2019-06-01').primaryEndpoints.blob]"
    }
  }
}

Guarde o mainTemplate.jsarquivado.Save the mainTemplate.json file.

Defina a sua experiência de criaçãoDefine your create experience

Como editor, define a experiência do portal para criar a aplicação gerida.As a publisher, you define the portal experience for creating the managed application. O createUiDefinition.jsno ficheiro gera a interface do portal.The createUiDefinition.json file generates the portal interface. Define como os utilizadores fornecem entrada para cada parâmetro usando elementos de controlo, incluindo drop-downs, caixas de texto e caixas de palavra-passe.You define how users provide input for each parameter using control elements including drop-downs, text boxes, and password boxes.

Criar um ficheiro nomeado createUiDefinition.js(Este nome é sensível a casos)Create a file named createUiDefinition.json (This name is case-sensitive)

Adicione o seguinte arranque JSON ao ficheiro e guarde-o.Add the following starter JSON to the file and save it.

{
  "$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": "storageConfig",
        "label": "Storage settings",
        "subLabel": {
          "preValidation": "Configure the infrastructure settings",
          "postValidation": "Done"
        },
        "bladeTitle": "Storage settings",
        "elements": [
          {
            "name": "storageAccounts",
            "type": "Microsoft.Storage.MultiStorageAccountCombo",
            "label": {
              "prefix": "Storage account name prefix",
              "type": "Storage account type"
            },
            "defaultValue": {
              "type": "Standard_LRS"
            },
            "constraints": {
              "allowedTypes": [
                "Premium_LRS",
                "Standard_LRS",
                "Standard_GRS"
              ]
            }
          }
        ]
      }
    ],
    "outputs": {
      "storageAccountNamePrefix": "[steps('storageConfig').storageAccounts.prefix]",
      "storageAccountType": "[steps('storageConfig').storageAccounts.type]",
      "location": "[location()]"
    }
  }
}

Para saber mais, consulte Começar com CreateUiDefinition.To learn more, see Get started with CreateUiDefinition.

Empacote os ficheirosPackage the files

Adicione os dois ficheiros a um ficheiro .zip denominado app.zip.Add the two files to a .zip file named app.zip. Os dois ficheiros devem estar ao nível da raiz do ficheiro .zip.The two files must be at the root level of the .zip file. Se os colocar numa pasta, receberá um erro ao criar a definição da aplicação gerida que indica que os ficheiros necessários não estão presentes.If you put them in a folder, you receive an error when creating the managed application definition that states the required files aren't present.

Carregue o pacote para uma localização acessível a partir de onde pode ser utilizada.Upload the package to an accessible location from where it can be consumed. Você precisará fornecer um nome único para a conta de armazenamento.You'll need to provide a unique name for the storage account.

New-AzResourceGroup -Name storageGroup -Location eastus

$storageAccount = New-AzStorageAccount `
  -ResourceGroupName storageGroup `
  -Name "mystorageaccount" `
  -Location eastus `
  -SkuName Standard_LRS `
  -Kind StorageV2

$ctx = $storageAccount.Context

New-AzStorageContainer -Name appcontainer -Context $ctx -Permission blob

Set-AzStorageBlobContent `
  -File "D:\myapplications\app.zip" `
  -Container appcontainer `
  -Blob "app.zip" `
  -Context $ctx

Criar a definição da aplicação geridaCreate the managed application definition

Crie uma aplicação ou grupo de utilizador no Azure Active DirectoryCreate an Azure Active Directory user group or application

O próximo passo é selecionar um grupo de utilizadores, utilizador ou aplicação para gerir os recursos para o cliente.The next step is to select a user group, user, or application for managing the resources for the customer. Esta identidade tem permissões no grupo de recursos gerido, de acordo com a função que é atribuída.This identity has permissions on the managed resource group according to the role that is assigned. O papel pode ser qualquer papel incorporado do Azure, como Proprietário ou Contribuinte.The role can be any Azure built-in role like Owner or Contributor. Para criar um novo grupo de utilizadores do Active Directory, veja Criar um grupo e adicionar membros no Azure Active Directory.To create a new Active Directory user group, see Create a group and add members in Azure Active Directory.

É preciso o ID de objeto do grupo de utilizadores a utilizar para gerir os recursos.You need the object ID of the user group to use for managing the resources.

$groupID=(Get-AzADGroup -DisplayName mygroup).Id

Obtenha o ID de definição de funçãoGet the role definition ID

Em seguida, precisa da definição de função ID da função incorporada Azure que pretende conceder acesso ao utilizador, grupo de utilizadores ou aplicação.Next, you need the role definition ID of the Azure built-in role you want to grant access to the user, user group, or application. Normalmente, utiliza a função de Proprietário ou Contribuidor ou Leitor.Typically, you use the Owner or Contributor or Reader role. O comando seguinte mostra como obter o ID da definição da função da função Proprietário:The following command shows how to get the role definition ID for the Owner role:

$ownerID=(Get-AzRoleDefinition -Name Owner).Id

Criar a definição da aplicação geridaCreate the managed application definition

Se ainda não tiver um grupo de recursos para armazenar a definição da aplicação gerida, crie uma agora:If you don't already have a resource group for storing your managed application definition, create one now:

New-AzResourceGroup -Name appDefinitionGroup -Location westcentralus

Agora, crie o recurso de definição da aplicação gerida.Now, create the managed application definition resource.

$blob = Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $ctx

New-AzManagedApplicationDefinition `
  -Name "ManagedStorage" `
  -Location "westcentralus" `
  -ResourceGroupName appDefinitionGroup `
  -LockLevel ReadOnly `
  -DisplayName "Managed Storage Account" `
  -Description "Managed Azure Storage Account" `
  -Authorization "${groupID}:$ownerID" `
  -PackageFileUri $blob.ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri

Após a conclusão do comando, terá uma definição de aplicação gerida no seu grupo de recursos.When the command completes, you have a managed application definition in your resource group.

Alguns dos parâmetros utilizados no exemplo anterior são:Some of the parameters used in the preceding example are:

  • grupode recursos : O nome do grupo de recursos onde é criada a definição de aplicação gerida.resource group: The name of the resource group where the managed application definition is created.
  • nível de bloqueio: O tipo de bloqueio colocado no grupo de recursos geridos.lock level: The type of lock placed on the managed resource group. Impede o cliente de realizar operações não desejadas neste grupo.It prevents the customer from performing undesirable operations on this resource group. Atualmente, o único nível de bloqueio suportado é ReadOnly.Currently, ReadOnly is the only supported lock level. Quando é especificado ReadOnly, o cliente só consegue ler os recursos presentes no grupo de recursos gerido.When ReadOnly is specified, the customer can only read the resources present in the managed resource group. As entidades editoras que têm acesso ao grupo de recurso gerido estão isentos do bloqueio.The publisher identities that are granted access to the managed resource group are exempt from the lock.
  • authorizations: descreve o ID de principal e o ID da definição da função utilizados para conceder permissões ao grupo de recursos gerido.authorizations: Describes the principal ID and the role definition ID that are used to grant permission to the managed resource group. É especificado com formato <principalId>:<roleDefinitionId>.It's specified in the format of <principalId>:<roleDefinitionId>. Se for necessário mais do que um valor, especifique-os no formato <principalId1>:<roleDefinitionId1>,<principalId2>:<roleDefinitionId2>.If more than one value is needed, specify them in the form <principalId1>:<roleDefinitionId1>,<principalId2>:<roleDefinitionId2>. Os valores são separados por uma vírgula.The values are separated by a comma.
  • ficheiro de pacote URI: A localização de um pacote .zip que contém os ficheiros necessários.package file URI: The location of a .zip package that contains the required files.

Traga o seu próprio armazenamento para a definição de aplicação geridaBring your own storage for the managed application definition

Pode optar por armazenar a definição de aplicação gerida dentro de uma conta de armazenamento fornecida por si durante a criação para que a sua localização e acesso possam ser totalmente geridos por si para as suas necessidades regulamentares.You can choose to store your managed application definition within a storage account provided by you during creation so that its location and access can be fully managed by you for your regulatory needs.

Nota

O armazenamento do seu próprio armazenamento só é suportado com o modelo ARM ou as implementações de API rest da definição de aplicação gerida.Bring your own storage is only supported with ARM template or REST API deployments of the managed application definition.

Selecionar a conta de armazenamentoSelect your storage account

Tem de criar uma conta de armazenamento para conter a definição de aplicação gerida para utilização com o Catálogo de Serviços.You must create a storage account to contain your managed application definition for use with Service Catalog.

Copie o ID de recursos da conta de armazenamento.Copy the storage account's resource ID. Será usado mais tarde ao implementar a definição.It will be used later when deploying the definition.

Desaprote a atribuição de funções para "Fornecedor de Recursos de Aparelhos" na sua conta de armazenamentoSet the role assignment for "Appliance Resource Provider" in your storage account

Antes de a definição de aplicação gerida poder ser implantada na sua conta de armazenamento, tem de dar permissões ao fornecedor de recursos do aparelho para que possa escrever os ficheiros de definição no recipiente da sua conta de armazenamento.Before your managed application definition can be deployed to your storage account, you must give contributor permissions to the Appliance Resource Provider role so that it can write the definition files to your storage account's container.

  1. No portal do Azure, navegue para a sua conta de armazenamento.In the Azure portal, navigate to your storage account.
  2. Selecione o controlo de acesso (IAM) para exibir as definições de controlo de acesso para a conta de armazenamento.Select Access control (IAM) to display the access control settings for the storage account. Selecione o separador funções para ver a lista de atribuições de funções.Select the Role assignments tab to see the list of role assignments.
  3. Na janela de atribuição de funções Adicionar, selecione a função Contribuinte.In the Add role assignment window, select the Contributor role.
  4. A partir do acesso do Access a Campo, selecione utilizador, grupo ou principal de serviço Azure.From the Assign access to field, select Azure AD user, group, or service principal.
  5. Em Seleção, procure a função de Fornecedor de Recursos de Aparelho e selecione-a.Under Select, search for Appliance Resource Provider role and select it.
  6. Guarde a tarefa de função.Save the role assignment.

Implementar a definição de aplicação gerida com um modelo ARMDeploy the managed application definition with an ARM template

Utilize o seguinte modelo ARM para implementar a sua aplicação gerida embalada como uma nova definição de aplicação gerida no Catálogo de Serviços cujos ficheiros de definição são armazenados e mantidos na sua própria conta de armazenamento:Use the following ARM template to deploy your packaged managed application as a new managed application definition in Service Catalog whose definition files are stored and maintained in your own storage account:

{
  "$schema": "http://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "applicationName": {
      "type": "string",
      "metadata": {
        "description": "Managed Application name"
      }
    },
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "definitionStorageResourceID": {
      "type": "string",
      "metadata": {
        "description": "Storage account resource ID for where you're storing your definition"
      }
    },
    "_artifactsLocation": {
      "type": "string",
      "metadata": {
        "description": "The base URI where artifacts required by this template are located."
      }
    }
  },
  "variables": {
    "lockLevel": "None",
    "description": "Sample Managed application definition",
    "displayName": "Sample Managed application definition",
    "managedApplicationDefinitionName": "[parameters('applicationName')]",
    "packageFileUri": "[parameters('_artifactsLocation')]",
    "defLocation": "[parameters('definitionStorageResourceID')]",
    "managedResourceGroupId": "[concat(subscription().id,'/resourceGroups/', concat(parameters('applicationName'),'_managed'))]",
    "applicationDefinitionResourceId": "[resourceId('Microsoft.Solutions/applicationDefinitions',variables('managedApplicationDefinitionName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Solutions/applicationDefinitions",
      "apiVersion": "2020-08-21-preview",
      "name": "[variables('managedApplicationDefinitionName')]",
      "location": "[parameters('location')]",
      "properties": {
        "lockLevel": "[variables('lockLevel')]",
        "description": "[variables('description')]",
        "displayName": "[variables('displayName')]",
        "packageFileUri": "[variables('packageFileUri')]",
        "storageAccountId": "[variables('defLocation')]"
      }
    }
  ],
  "outputs": {}
}

Adicionámos um novo imóvel nomeado storageAccountId às suas propriedades e applicationDefinitions fornecemos iD de conta de armazenamento que deseja armazenar a sua definição no seu valor:We have added a new property named storageAccountId to your applicationDefinitions properties and provide storage account ID you wish to store your definition in as its value:

Pode verificar se os ficheiros de definição de aplicação são guardados na sua conta de armazenamento fornecida num recipiente intitulado applicationDefinitions .You can verify that the application definition files are saved in your provided storage account in a container titled applicationDefinitions.

Nota

Para uma maior segurança, pode criar uma definição de aplicações geridas armazená-la numa bolha de conta de armazenamento Azure onde a encriptação está ativada.For added security, you can create a managed applications definition store it in an Azure storage account blob where encryption is enabled. Os conteúdos de definição são encriptados através das opções de encriptação da conta de armazenamento.The definition contents are encrypted through the storage account's encryption options. Apenas os utilizadores com permissões para o ficheiro podem ver a definição no Catálogo de Serviços.Only users with permissions to the file can see the definition in Service Catalog.

Confirmar que os utilizadores podem ver a definiçãoMake sure users can see your definition

Tem acesso à definição de aplicação gerida, mas deve verificar se outros utilizadores na sua organização podem aceder à mesma.You have access to the managed application definition, but you want to make sure other users in your organization can access it. Conceda-lhes, pelo menos, a função de Leitor na definição.Grant them at least the Reader role on the definition. Estes podem ter herdado este nível de acesso através da subscrição ou do grupo de recursos.They may have inherited this level of access from the subscription or resource group. Para verificar quem tem acesso à definição e adicionar utilizadores ou grupos, consulte adicionar ou remover atribuições de funções Azure utilizando o portal Azure.To check who has access to the definition and add users or groups, see Add or remove Azure role assignments using the Azure portal.

Passos seguintesNext steps

Publicou a definição da aplicação gerida.You've published the managed application definition. Agora, saiba como implementar uma instância dessa definição.Now, learn how to deploy an instance of that definition.