Sdílet prostřednictvím


Rychlý start: Vytvoření a publikování definice aplikace spravované přes Azure

Tento rychlý start obsahuje úvod do práce se spravovanými aplikacemi Azure. Vytvoříte a publikujete definici spravované aplikace, která je uložená v katalogu služeb a je určená pro členy vaší organizace.

Pokud chcete do katalogu služeb publikovat spravovanou aplikaci, proveďte následující úlohy:

  • Vytvořte šablonu Azure Resource Manageru (šablonu ARM), která definuje prostředky, které se nasazují pomocí spravované aplikace.
  • Definujte prvky uživatelského rozhraní portálu pro nasazení spravované aplikace.
  • Vytvořte balíček .zip , který obsahuje požadované soubory JSON. Soubor balíčku .zip má limit 120 MB pro definici spravované aplikace katalogu služeb.
  • Publikujte definici spravované aplikace, aby byla dostupná v katalogu služeb.

Pokud je definice spravované aplikace větší než 120 MB nebo pokud chcete pro účely dodržování předpisů vaší organizace použít vlastní účet úložiště, přejděte do části Rychlý start: Vytvoření a publikování definice spravované aplikace Azure pomocí vlastního úložiště.

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 pro nasazení služby App Service, plánu služby App Service a účtu úložiště pro aplikaci. Tento účet úložiště se nepoužívá k ukládání definice spravované aplikace.

{
  "$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]"
    }
  }
}

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, názvu plánu služby App Service, předpony účtu úložiště a typu účtu úložiště. Během nasazování proměnné v mainTemplate.json pomocí uniqueString funkce připojí k předponám názvu řetězec o 13 znacích, aby byly názvy 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
          }
        ]
      },
      {
        "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]"
    }
  }
}

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ě.

V editoru Visual Studio Code otevřete nový terminál PowerShellu a přihlaste se k předplatnému Azure.

Connect-AzAccount

Příkaz otevře výchozí prohlížeč a vyzve vás, abyste se přihlásili k Azure. Další informace najdete v tématu Přihlášení pomocí Azure PowerShellu.

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.

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

Vytvoření definice spravované aplikace

V této části získáte informace o identitě z ID Microsoft Entra, vytvoříte skupinu prostředků a nasadíte definici spravované aplikace.

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 této 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 této proměnné použijete při nasazení definice spravované aplikace.

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

Publikování definice spravované aplikace

Vytvořte skupinu prostředků pro definici spravované aplikace.

New-AzResourceGroup -Name appDefinitionGroup -Location westus

Příkaz blob vytvoří proměnnou pro uložení adresy URL balíčku .zip souboru. Tato proměnná se používá v příkazu, který vytvoří definici spravované aplikace.

$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

Po dokončení příkazu máte definici spravované aplikace ve vaší skupině prostředků.

Některé z parametrů použitých v předchozím příkladu:

  • ResourceGroupName: Název skupiny prostředků, ve které je vytvořena definice spravované aplikace.
  • LockLevel: U lockLevel spravované skupiny prostředků zabrání zákazníkovi provádět nežádoucí operace 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é.
  • Authorization: Popisuje ID objektu zabezpečení a ID definice role, které slouží k udělení oprávnění spravované skupině prostředků.
    • "${principalid}:$roleid" nebo můžete pro každou proměnnou použít složené závorky "${principalid}:${roleid}".
    • K oddělení více hodnot použijte čárku: "${principalid1}:$roleid1", "${principalid2}:$roleid2".
  • PackageFileUri: Umístění souboru balíčku .zip , který obsahuje požadované soubory.

Je potřeba zajistit, že budou uživatelé vidět vaši 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řečtěte si téma 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 a appDefinitionGroup.

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

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name appDefinitionGroup

Další kroky

Publikovali jste definici spravované aplikace. V dalším kroku se dozvíte, jak nasadit instanci této definice.