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 mají nasadit se 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. 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.

Předpoklady

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 mainTemplate.json s rozlišováním velkých a malých písmen 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-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[variables('appServicePlanSku')]",
        "capacity": "[variables('appServicePlanCapacity')]"
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2022-03-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')), '2022-09-01').keys[0].value)]"
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ],
  "outputs": {
    "appServicePlan": {
      "type": "string",
      "value": "[parameters('appServicePlanName')]"
    },
    "appServiceApp": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2022-03-01').defaultHostName]"
    },
    "storageAccount": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2022-09-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í používají proměnné v mainTemplate.jsonuniqueString funkci k připojení řetězce s 13 znaky k předponám názvu, aby názvy byly 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 soubor app.zip do účtu úložiště Azure, abyste ho mohli použít při nasazování 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 <demostorageaccount> 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 westus3

$storageAccount = New-AzStorageAccount `
  -ResourceGroupName packageStorageGroup `
  -Name "<demostorageaccount>" `
  -Location westus3 `
  -SkuName Standard_LRS `
  -Kind StorageV2

$ctx = $storageAccount.Context

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

Set-AzStorageBlobContent `
  -File "app.zip" `
  -Container appcontainer `
  -Blob "app.zip" `
  -Context $ctx

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 westus3

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

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

New-AzManagedApplicationDefinition `
  -Name "sampleManagedApplication" `
  -Location "westus3" `
  -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

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ář. Je možné, že tuto úroveň přístupu zdědili 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.