Sdílet prostřednictvím


Rychlý start: Vytvoření a publikování definice spravované aplikace Azure s využitím vlastního úložiště

Tento rychlý start obsahuje úvod k používání vlastního úložiště (BYOS) pro spravovanou aplikaci Azure. V katalogu služeb vytvoříte a publikujete definici spravované aplikace pro členy vaší organizace. Při použití vlastního účtu úložiště může definice spravované aplikace překročit limit 120 MB katalogu služeb.

Pokud chcete do katalogu služeb publikovat definici spravované aplikace, proveďte následující úlohy:

  • Vytvořte šablonu Azure Resource Manageru (šablonu ARM), která definuje prostředky Azure nasazené spravovanou aplikací.
  • Definujte prvky uživatelského rozhraní portálu pro nasazení spravované aplikace.
  • Vytvořte balíček .zip , který obsahuje požadované soubory JSON.
  • Vytvořte účet úložiště, do kterého ukládáte definici spravované aplikace.
  • Nasaďte definici spravované aplikace do vlastního účtu úložiště, aby byla dostupná v katalogu služeb.

Pokud je definice spravované aplikace menší než 120 MB a nechcete používat vlastní účet úložiště, přejděte do části Rychlý start: Vytvoření a publikování definice spravované aplikace Azure.

Bicep můžete použít k vývoji definice spravované aplikace, ale před publikováním definice v Azure ji musíte převést na JSON šablony ARM. Další informace najdete v tématu Rychlý start: Vytvoření a publikování definice spravované aplikace Azure pomocí Bicep.

Pomocí nástroje Bicep můžete také nasadit definici spravované aplikace z katalogu služeb. Další informace najdete v rychlém startu: Použití Bicep k nasazení definice spravované aplikace Azure.

Požadavky

K dokončení tohoto rychlého startu potřebujete následující položky:

Vytvoření šablony ARM

Každá definice spravované aplikace obsahuje soubor s názvem mainTemplate.json. Šablona definuje prostředky Azure, které se mají nasadit, a liší se od běžné šablony ARM.

Otevřete Visual Studio Code, vytvořte soubor s názvem rozlišujím malá a velká písmena mainTemplate.json a uložte ho.

Přidejte následující JSON a soubor uložte. Definuje prostředky spravované aplikace pro nasazení služby App Service, plánu služby App Service a účtu úložiště.

{
  "$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."
      }
    }
  },
  "variables": {
    "appServicePlanSku": "B1",
    "appServicePlanCapacity": 1,
    "appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'), uniqueString(resourceGroup().id))]",
    "linuxFxVersion": "DOTNETCORE|8.0"
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2023-01-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[variables('appServicePlanSku')]",
        "capacity": "[variables('appServicePlanCapacity')]"
      },
      "kind": "linux",
      "properties": {
        "zoneRedundant": false,
        "reserved": true
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2023-01-01",
      "name": "[variables('appServiceName')]",
      "location": "[parameters('location')]",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "httpsOnly": true,
        "redundancyMode": "None",
        "siteConfig": {
          "linuxFxVersion": "[variables('linuxFxVersion')]",
          "minTlsVersion": "1.2",
          "ftpsState": "Disabled"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
      ]
    }
  ],
  "outputs": {
    "appServicePlan": {
      "type": "string",
      "value": "[parameters('appServicePlanName')]"
    },
    "appServiceApp": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2023-01-01').defaultHostName]"
    }
  }
}

Definování prostředí portálu

Jako vydavatel definujete prostředí portálu pro vytvoření spravované aplikace. Soubor createUiDefinition.json vygeneruje uživatelské rozhraní portálu. Definujete, jak uživatelé poskytují vstup pro každý parametr pomocí ovládacích prvků , jako jsou rozevírací seznamy a textová pole.

V tomto příkladu vás uživatelské rozhraní vyzve k zadání předpony názvu služby App Service a názvu plánu služby App Service. Během nasazování mainTemplate.json appServiceName proměnné pomocí uniqueString funkce připojí k předponě názvu řetězec o 13 znacích, aby byl název globálně jedinečný v rámci Azure.

Otevřete Visual Studio Code, vytvořte soubor s názvem s rozlišováním velkých a malých písmen createUiDefinition.json a uložte ho.

Do souboru přidejte následující kód JSON a uložte ho.

{
  "$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
          }
        ]
      }
    ],
    "outputs": {
      "location": "[location()]",
      "appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
      "appServiceNamePrefix": "[steps('webAppSettings').appServiceName]"
    }
  }
}

Další informace najdete v tématu Začínáme s createUiDefinition.

Zabalení souborů

Přidejte dva soubory do souboru balíčku s názvem app.zip. Oba soubory musí být na kořenové úrovni souboru .zip . Pokud jsou soubory ve složce, při vytváření definice spravované aplikace se zobrazí chyba, která uvádí, že požadované soubory nejsou k dispozici.

Nahrajte app.zip do účtu úložiště Azure, abyste ho mohli použít při nasazení definice spravované aplikace. Název účtu úložiště musí být globálně jedinečný v rámci Azure a délka musí být 3 až 24 znaků s malými písmeny a číslicemi. V příkazu nahraďte zástupný symbol <pkgstorageaccountname> včetně úhlových závorek (<>) jedinečným názvem účtu úložiště.

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

Proměnná $pkgstorageparms používá k vylepšení čitelnosti hodnot parametrů použitých v příkazu k vytvoření nového účtu úložiště powershellové dělení. Splatting se používá v jiných příkazech PowerShellu, které používají více hodnot parametrů.

Po vytvoření účtu úložiště přidejte přispěvatel dat objektů blob úložiště role do oboru účtu úložiště. Přiřaďte přístup k uživatelskému účtu Microsoft Entra. V závislosti na vaší úrovni přístupu v Azure možná budete potřebovat další oprávnění přiřazená správcem. Další informace najdete v tématu Přiřazení role Azure pro přístup k datům objektů blob a přiřazení rolí Azure pomocí webu Azure Portal.

Po přidání role do účtu úložiště trvá několik minut, než se v Azure aktivuje. Pak můžete vytvořit kontext potřebný k vytvoření kontejneru a nahrání souboru.

$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

Pomocí následujícího příkazu uložte identifikátor URI souboru balíčku do proměnné s názvem packageuri. Hodnotu proměnné použijete při nasazení definice spravované aplikace.

$packageuri=(Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $pkgstoragecontext).ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri

Použití vlastního úložiště pro definici spravované aplikace

Definici spravované aplikace uložíte do vlastního účtu úložiště, aby její umístění a přístup mohly být spravovány podle zákonných potřeb vaší organizace. Pomocí vlastního účtu úložiště můžete mít aplikaci, která překračuje limit 120 MB pro definici spravované aplikace katalogu služeb.

Poznámka:

Použití vlastního úložiště je podporováno pouze pomocí šablony ARM nebo nasazení rozhraní REST API definice spravované aplikace.

Vytvoření účtu úložiště

Vytvořte účet úložiště pro definici spravované aplikace. Název účtu úložiště musí být globálně jedinečný v rámci Azure a délka musí být 3 až 24 znaků s malými písmeny a číslicemi.

Tento příklad vytvoří novou skupinu prostředků s názvem byosDefinitionStorageGroup. V příkazu nahraďte zástupný symbol <byosaccountname> včetně úhlových závorek (<>) jedinečným názvem účtu úložiště.

New-AzResourceGroup -Name byosDefinitionStorageGroup -Location westus

$byostorageparms = @{
  ResourceGroupName = "byosDefinitionStorageGroup"
  Name = "<byosaccountname>"
  Location = "westus"
  SkuName = "Standard_LRS"
  Kind = "StorageV2"
  MinimumTlsVersion = "TLS1_2"
  AllowBlobPublicAccess = $true
  AllowSharedKeyAccess = $true
}

$byosstorageaccount = New-AzStorageAccount @byostorageparms

Po vytvoření účtu úložiště přidejte přispěvatel dat objektů blob úložiště role do oboru účtu úložiště. Přiřaďte přístup k uživatelskému účtu Microsoft Entra. Budete potřebovat přístup k kroku později v procesu.

Po přidání role do účtu úložiště trvá několik minut, než se v Azure aktivuje. Pak můžete vytvořit kontext potřebný k vytvoření kontejneru a nahrání souboru.

$byosstoragecontext = New-AzStorageContext -StorageAccountName $byosstorageaccount.StorageAccountName -UseConnectedAccount

Pomocí následujícího příkazu uložte ID prostředku účtu úložiště do proměnné s názvem byosstorageid. Hodnotu proměnné použijete při nasazení definice spravované aplikace.

$byosstorageid = (Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).Id

Nastavení přiřazení role pro účet úložiště

Před nasazením definice spravované aplikace do účtu úložiště přiřaďte roli Přispěvatel uživateli poskytovatele prostředků zařízení v oboru účtu úložiště. Toto přiřazení umožňuje zápisu definičních souborů identity do kontejneru účtu úložiště.

K nastavení přiřazení role můžete použít proměnné. Tento příklad používá proměnnou $byosstorageid , kterou jste vytvořili v předchozím kroku, a vytvoří proměnnou $arpid .

$arpid = (Get-AzADServicePrincipal -SearchString "Appliance Resource Provider").Id

New-AzRoleAssignment -ObjectId $arpid -RoleDefinitionName Contributor -Scope $byosstorageid

Poskytovatel prostředků zařízení je instanční objekt ve vašem tenantovi Microsoft Entra. Na webu Azure Portal můžete ověřit, jestli je zaregistrovaná, a to tak, že přejdete do podnikových aplikací Microsoft Entra ID>a změníte filtr vyhledávání na Aplikace Microsoftu. Vyhledejte poskytovatele prostředků zařízení. Pokud ho nenajdete, zaregistrujte Microsoft.Solutions poskytovatele prostředků.

Získání ID skupiny a ID definice role

Dalším krokem je vybrat uživatele, skupinu zabezpečení nebo aplikaci pro správu prostředků pro zákazníka. Tato identita má oprávnění ke spravované skupině prostředků podle přiřazené role. Role může být libovolná předdefinovaná role Azure, jako je vlastník nebo přispěvatel.

Tento příklad používá skupinu zabezpečení a váš účet Microsoft Entra by měl být členem skupiny. Pokud chcete získat ID objektu skupiny, nahraďte zástupný symbol <managedAppDemo> včetně úhlových závorek (<>) názvem vaší skupiny. Hodnotu proměnné použijete při nasazení definice spravované aplikace.

Pokud chcete vytvořit novou skupinu Microsoft Entra, přejděte do části Správa skupin Microsoft Entra a členství ve skupinách.

$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id

Dále získejte ID definice role předdefinované role Azure, kterou chcete udělit přístup k uživateli, skupině nebo aplikaci. Hodnotu proměnné použijete při nasazení definice spravované aplikace.

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

Vytvoření šablony nasazení definice

K nasazení definice spravované aplikace v katalogu služeb použijte soubor Bicep. Po nasazení se definiční soubory ukládají ve vašem vlastním účtu úložiště.

Otevřete Visual Studio Code, vytvořte soubor s názvem deployDefinition.bicep a uložte ho.

Přidejte následující kód Bicep a soubor uložte.

param location string = resourceGroup().location

@description('Name of the managed application definition.')
param managedApplicationDefinitionName string

@description('Resource ID for the bring your own storage account where the definition is stored.')
param definitionStorageResourceID string

@description('The URI of the .zip package file.')
param packageFileUri string

@description('Publishers Principal ID that needs permissions to manage resources in the managed resource group.')
param principalId string

@description('Role ID for permissions to the managed resource group.')
param roleId string

var definitionLockLevel = 'ReadOnly'
var definitionDisplayName = 'Sample BYOS managed application'
var definitionDescription = 'Sample BYOS managed application that deploys web resources'

resource managedApplicationDefinition 'Microsoft.Solutions/applicationDefinitions@2021-07-01' = {
  name: managedApplicationDefinitionName
  location: location
  properties: {
    lockLevel: definitionLockLevel
    description: definitionDescription
    displayName: definitionDisplayName
    packageFileUri: packageFileUri
    storageAccountId: definitionStorageResourceID
    authorizations: [
      {
        principalId: principalId
        roleDefinitionId: roleId
      }
    ]
  }
}

Další informace o vlastnostech šablony najdete v tématu Microsoft.Solutions/applicationDefinitions.

Skupina lockLevel spravovaných prostředků zabrání zákazníkovi v provádění nežádoucích operací s touto skupinou prostředků. ReadOnly V současné době je jedinou podporovanou úrovní uzamčení. ReadOnly určuje, že zákazník může číst pouze prostředky, které jsou ve spravované skupině prostředků. Identity vydavatele, kterým je udělen přístup ke spravované skupině prostředků, jsou z úrovně uzamčení vyloučené.

Vytvoření souboru parametrů

Šablona nasazení definice spravované aplikace potřebuje vstup pro několik parametrů. Příkaz nasazení vás vyzve k zadání hodnot nebo můžete pro tyto hodnoty vytvořit soubor parametrů. V tomto příkladu použijeme soubor parametrů k předání hodnot parametrů příkazu nasazení.

V editoru Visual Studio Code vytvořte nový soubor s názvem deployDefinition-parameters.bicepparam a uložte ho.

Do souboru parametrů přidejte následující kód a uložte ho. Potom nahraďte <placeholder values> hodnoty včetně úhlových závorek (<>).

using './deployDefinition.bicep'

param managedApplicationDefinitionName = 'sampleByosManagedApplication'
param definitionStorageResourceID = '<placeholder for you BYOS storage account ID>'
param packageFileUri = '<placeholder for the packageFileUri>'
param principalId = '<placeholder for principalid value>'
param roleId = '<placeholder for roleid value>'

Následující tabulka popisuje hodnoty parametrů pro definici spravované aplikace.

Parametr Hodnota
managedApplicationDefinitionName Název definice spravované aplikace V tomto příkladu použijte sampleByosManagedApplication.
definitionStorageResourceID ID prostředku pro účet úložiště, ve kterém je definice uložená. Použijte hodnotu proměnné byosstorageid .
packageFileUri Zadejte identifikátor URI souboru balíčku .zip . Použijte hodnotu proměnné packageuri .
principalId ID objektu zabezpečení vydavatelů, které potřebuje oprávnění ke správě prostředků ve spravované skupině prostředků. Použijte hodnotu proměnné principalid .
roleId ID role pro oprávnění ke spravované skupině prostředků. Například Vlastník, Přispěvatel, Čtenář. Použijte hodnotu proměnné roleid .

Získání hodnot proměnných:

  • Azure PowerShell: V PowerShellu zadejte $variableName hodnotu proměnné.
  • Azure CLI: V Bash zadejte echo $variableName hodnotu proměnné.

Nasazení definice

Když nasadíte definici spravované aplikace, bude dostupná v katalogu služeb. Tento proces nenasazuje prostředky spravované aplikace.

Vytvořte skupinu prostředků s názvem byosAppDefinitionGroup a nasaďte definici spravované aplikace do svého účtu úložiště.

New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus

$deployparms = @{
  ResourceGroupName = "byosAppDefinitionGroup"
  TemplateFile = "deployDefinition.bicep"
  TemplateParameterFile = "deployDefinition-parameters.bicepparam"
  Name = "deployDefinition"
}

New-AzResourceGroupDeployment @deployparms

Ověření úložiště definičních souborů

Během nasazování vlastnost šablony storageAccountId používá ID prostředku vašeho účtu úložiště a vytvoří nový kontejner s názvem applicationdefinitionsrozlišující malá a malá písmena . Soubory z balíčku .zip , který jste zadali během nasazení, se uloží do nového kontejneru.

Následující příkazy můžete použít k ověření, že jsou soubory definic spravované aplikace uložené v kontejneru účtu úložiště.

Get-AzStorageContainer -Name applicationdefinitions -Context $byosstoragecontext |
Get-AzStorageBlob | Select-Object -Property Name | Format-List

Poznámka:

Pro zvýšení zabezpečení můžete vytvořit definici spravovaných aplikací a uložit ji do objektu blob účtu úložiště Azure, kde je povolené šifrování. Obsah definice se šifruje prostřednictvím možností šifrování účtu úložiště. K definici v katalogu služeb mají přístup jenom uživatelé s oprávněními k souboru.

Aktualizace zabezpečení účtu úložiště

Po úspěšném nasazení zakažte vlastnost sdíleného přístupového klíče, aby se zlepšilo zabezpečení účtu úložiště. Po vytvoření účtu úložiště jste přidali přiřazení role pro Přispěvatel dat objektů blob služby Storage, které vám umožní přístup k kontejneru a objektům blob bez použití klíčů úložiště.

Pokud chcete zkontrolovat a aktualizovat nastavení sdíleného přístupového klíče účtu úložiště, použijte následující příkazy:

(Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).AllowSharedKeyAccess

Set-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName -AllowSharedKeyAccess $false

Ujistěte se, že uživatelé mají přístup k vaší definici.

Máte přístup k definici spravované aplikace, ale je potřeba zajistit přístup i pro ostatní uživatele ve vaší organizaci. Udělte jim k definici alespoň přístup role Čtenář. Možná zdědili tuto úroveň přístupu z předplatného nebo skupiny prostředků. Pokud chcete zkontrolovat, kdo má přístup k definici, a přidat uživatele nebo skupiny, přejděte k přiřazení rolí Azure pomocí webu Azure Portal.

Vyčištění prostředků

Pokud definici nasadíte, pokračujte v části Další kroky , která odkazuje na článek a nasadí definici.

Pokud jste dokončili definici spravované aplikace, můžete odstranit skupiny prostředků, které jste vytvořili s názvem packageStorageGroup, byosDefinitionStorageGroup a byosAppDefinitionGroup.

Příkaz vás vyzve k potvrzení, že chcete odebrat skupinu prostředků.

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name byosDefinitionStorageGroup

Remove-AzResourceGroup -Name byosAppDefinitionGroup

Další kroky

Publikovali jste definici spravované aplikace. Teď se dozvíte, jak nasadit instanci této definice.