Megosztás a következőn keresztül:


Rövid útmutató: Saját tárterület létrehozása és közzététele azure-beli felügyelt alkalmazásdefiníciók létrehozásához és közzétételéhez

Ez a rövid útmutató bemutatja, hogyan hozhat létre saját tárterületet (BYOS) egy Azure-beli felügyelt alkalmazáshoz. A szervezet tagjai számára felügyelt alkalmazásdefiníciót hozhat létre és tehet közzé a szolgáltatáskatalógusban. Saját tárfiók használata esetén a felügyelt alkalmazásdefiníció túllépheti a szolgáltatáskatalógus 120 MB-os korlátját.

Felügyelt alkalmazásdefiníció szolgáltatáskatalógusban való közzétételéhez hajtsa végre a következő feladatokat:

  • Hozzon létre egy Azure Resource Manager-sablont (ARM-sablont), amely meghatározza a felügyelt alkalmazás által üzembe helyezett Azure-erőforrásokat.
  • Meg kell határoznia a felhasználói felület elemeit a portál számára, amikor üzembe helyezi a felügyelt alkalmazást.
  • Hozzon létre egy .zip csomagot, amely tartalmazza a szükséges JSON-fájlokat.
  • Hozzon létre egy tárfiókot, ahol a felügyelt alkalmazás definícióját tárolja.
  • Helyezze üzembe a felügyelt alkalmazásdefiníciót a saját tárfiókjában, hogy elérhető legyen a szolgáltatáskatalógusban.

Ha a felügyelt alkalmazásdefiníció kisebb 120 MB-nál, és nem szeretné használni a saját tárfiókját, tekintse meg a rövid útmutatót: Azure Managed Application-definíció létrehozása és közzététele.

A Bicep használatával fejleszthet felügyelt alkalmazásdefiníciót, de a definíció azure-ban való közzététele előtt arm-sablon JSON-ra kell konvertálni. További információ : Rövid útmutató: Azure Managed Application-definíció létrehozása és közzététele a Bicep használatával.

A Bicep használatával felügyelt alkalmazásdefiníciót is üzembe helyezhet a szolgáltatáskatalógusból. További információ : Rövid útmutató: Azure Managed Application Definition üzembe helyezése a Bicep használatával.

Előfeltételek

A rövid útmutató végrehajtásához a következő elemekre van szüksége:

Az ARM-sablon létrehozása

Minden felügyelt alkalmazás definíciója tartalmaz egy mainTemplate.json nevű fájlt. A sablon meghatározza az üzembe helyezendő Azure-erőforrásokat, és nem különbözik a szokásos ARM-sablontól.

Nyissa meg a Visual Studio Code-ot, hozzon létre egy kis- és nagybetűknek mainTemplate.json nevű fájlt, és mentse azt.

Adja hozzá a következő JSON-t, és mentse a fájlt. Meghatározza a felügyelt alkalmazás erőforrásait az App Service, az App Service-csomag és a tárfiók üzembe helyezéséhez.

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

A portál élményének meghatározása

Közzétevőként ön határozza meg a portál felületét a felügyelt alkalmazás létrehozásához. A createUiDefinition.json fájl létrehozza a portál felhasználói felületét. Ön határozza meg, hogy a felhasználók hogyan adnak bemenetet az egyes paraméterekhez vezérlőelemek, például legördülő listák és szövegdobozok használatával.

Ebben a példában a felhasználói felület kéri, hogy adja meg az App Service névelőtagját és az App Service-csomag nevét. A mainTemplate.json telepítése során a appServiceName változók a uniqueString függvény használatával fűznek hozzá egy 13 karakterből álló sztringet a névelőtaghoz, hogy a név globálisan egyedi legyen az Azure-ban.

Nyissa meg a Visual Studio Code-ot, hozzon létre egy kis- és nagybetűknek createUiDefinition.json nevű fájlt, és mentse.

Adja hozzá a következő JSON-kódot a fájlhoz, és mentse.

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

További információért olvassa el a CreateUiDefinition használatának első lépéseit.

A fájlok becsomagolása

Adja hozzá a két fájlt egy app.zip nevű csomagfájlhoz. A két fájlnak a .zip fájl gyökérszintjén kell lennie. Ha a fájlok egy mappában találhatók, a felügyelt alkalmazásdefiníció létrehozásakor hibaüzenet jelenik meg, amely szerint a szükséges fájlok nincsenek jelen.

Töltsön fel app.zip egy Azure Storage-fiókba, hogy a felügyelt alkalmazás definíciójának üzembe helyezésekor használhassa. A tárfiók nevének globálisan egyedinek kell lennie az Azure-ban, a hossznak pedig 3–24 karakternek kell lennie, csak kisbetűkkel és számokkal. A parancsban cserélje le a helyőrzőt <pkgstorageaccountname> , beleértve a szögletes zárójeleket (<>) az egyedi tárfiók nevére.

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 változó PowerShell-splatting használatával javítja az új tárfiók létrehozásához a parancsban használt paraméterértékek olvashatóságát. A Splatting más, több paraméterértéket használó PowerShell-parancsokban használatos.

A tárfiók létrehozása után adja hozzá a tárfiók hatóköréhez a Storage Blob Data Contributor szerepkör-hozzárendelést. Hozzáférés hozzárendelése a Microsoft Entra felhasználói fiókjához. Az Azure-beli hozzáférési szinttől függően előfordulhat, hogy a rendszergazda más engedélyeket is hozzárendel. További információ: Azure-szerepkör hozzárendelése blobadatokhoz való hozzáféréshez és Azure-szerepkörök hozzárendelése az Azure Portal használatával.

Miután hozzáadta a szerepkört a tárfiókhoz, néhány percig tart, amíg aktívvá válik az Azure-ban. Ezután létrehozhatja a tároló létrehozásához és a fájl feltöltéséhez szükséges környezetet.

$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

A csomagfájl URI-jának tárolásához használja az alábbi parancsot egy nevesített packageuriváltozóban. A felügyelt alkalmazásdefiníció üzembe helyezésekor használja a változó értékét.

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

Saját tároló használata a felügyelt alkalmazás definíciójához

A felügyelt alkalmazásdefiníciót a saját tárfiókjában tárolja, hogy annak helyét és hozzáférését ön felügyelhesse a szervezet szabályozási igényeinek megfelelően. A saját tárfiók használatával olyan alkalmazással rendelkezhet, amely meghaladja a szolgáltatáskatalógus felügyelt alkalmazásdefiníciójának 120 MB-os korlátját.

Feljegyzés

A saját tárterület létrehozása csak a felügyelt alkalmazásdefiníció ARM-sablonjával vagy REST API-telepítéseivel támogatott.

A tárfiók létrehozása

Hozza létre a felügyelt alkalmazásdefiníció tárfiókját. A tárfiók nevének globálisan egyedinek kell lennie az Azure-ban, a hossznak pedig 3–24 karakternek kell lennie, csak kisbetűkkel és számokkal.

Ez a példa létrehoz egy új erőforráscsoportot .byosDefinitionStorageGroup A parancsban cserélje le a helyőrzőt <byosaccountname> , beleértve a szögletes zárójeleket (<>) az egyedi tárfiók nevére.

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

A tárfiók létrehozása után adja hozzá a tárfiók hatóköréhez a Storage Blob Data Contributor szerepkör-hozzárendelést. Hozzáférés hozzárendelése a Microsoft Entra felhasználói fiókjához. A folyamat egy későbbi lépéséhez hozzáférésre van szüksége.

Miután hozzáadta a szerepkört a tárfiókhoz, néhány percig tart, amíg aktívvá válik az Azure-ban. Ezután létrehozhatja a tároló létrehozásához és a fájl feltöltéséhez szükséges környezetet.

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

A következő paranccsal tárolja a tárfiók erőforrás-azonosítóját egy nevesített byosstorageidváltozóban. A felügyelt alkalmazásdefiníció üzembe helyezésekor használja a változó értékét.

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

A tárfiók szerepkör-hozzárendelésének beállítása

Mielőtt üzembe helyezené a felügyelt alkalmazásdefiníciót a tárfiókban, rendelje hozzá a közreműködői szerepkört a berendezés erőforrás-szolgáltatójának felhasználójához a tárfiók hatókörében. Ez a hozzárendelés lehetővé teszi, hogy az identitás definíciós fájlokat írjon a tárfiók tárolójába.

A szerepkör-hozzárendelés beállításához változókat használhat. Ez a példa az $byosstorageid előző lépésben létrehozott változót használja, és létrehozza a változót $arpid .

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

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

A Berendezés erőforrás-szolgáltató egy szolgáltatásnév a Microsoft Entra-bérlőben. Az Azure Portalon ellenőrizheti, hogy regisztrálva van-e a Microsoft Entra ID>Enterprise-alkalmazásokban, és a keresési szűrőt Microsoft-alkalmazásokra módosíthatja. Keresse meg a Berendezés erőforrás-szolgáltatót. Ha nem található, regisztrálja az erőforrás-szolgáltatót Microsoft.Solutions .

Csoportazonosító és szerepkördefiníció azonosítójának lekérése

A következő lépés egy felhasználó, biztonsági csoport vagy alkalmazás kiválasztása az ügyfél erőforrásainak kezelésére. Ez az identitás a hozzárendelt szerepkörnek megfelelően rendelkezik engedélyekkel a felügyelt erőforráscsoporthoz. A szerepkör lehet bármilyen beépített Azure-szerepkör, például tulajdonos vagy közreműködő.

Ez a példa egy biztonsági csoportot használ, és a Microsoft Entra-fióknak a csoport tagjának kell lennie. A csoport objektumazonosítójának lekéréséhez cserélje le a helyőrzőt <managedAppDemo> , beleértve a szögletes zárójeleket (<>) a csoport nevére. A felügyelt alkalmazásdefiníció üzembe helyezésekor használja a változó értékét.

Új Microsoft Entra-csoport létrehozásához lépjen a Microsoft Entra-csoportok és csoporttagság kezelése elemre.

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

Ezután szerezze be annak az Azure-beli beépített szerepkörnek a szerepkördefiníciós azonosítóját, amelyet hozzáférést szeretne biztosítani a felhasználónak, csoportnak vagy alkalmazásnak. A felügyelt alkalmazásdefiníció üzembe helyezésekor használja a változó értékét.

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

A definíció üzembehelyezési sablonjának létrehozása

A felügyelt alkalmazásdefiníciót egy Bicep-fájl használatával helyezheti üzembe a szolgáltatáskatalógusban. Az üzembe helyezés után a definíciós fájlokat a rendszer a saját tárfiókjában tárolja.

Nyissa meg a Visual Studio Code-ot, hozzon létre egy deployDefinition.bicep nevű fájlt, és mentse.

Adja hozzá a következő Bicep-kódot, és mentse a fájlt.

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
      }
    ]
  }
}

A sablon tulajdonságairól további információt a Microsoft.Solutions/applicationDefinitions webhelyen talál.

A lockLevel felügyelt erőforráscsoportban az ügyfél nem kívánt műveleteket hajt végre ezen az erőforráscsoporton. ReadOnly Jelenleg ez az egyetlen támogatott zárolási szint. ReadOnly megadja, hogy az ügyfél csak a felügyelt erőforráscsoportban található erőforrásokat olvassa be. A felügyelt erőforráscsoporthoz hozzáférést biztosító közzétevői identitások mentesülnek a zárolási szint alól.

A paraméterfájl létrehozása

A felügyelt alkalmazásdefiníció üzembehelyezési sablonjának több paraméterhez is bemenetre van szüksége. Az üzembe helyezési parancssor kéri az értékek megadását, vagy létrehozhat egy paraméterfájlt az értékekhez. Ebben a példában egy paraméterfájl használatával továbbítja a paraméterértékeket az üzembe helyezési parancsnak.

A Visual Studio Code-ban hozzon létre egy deployDefinition-parameters.bicepparam nevű új fájlt, és mentse azt.

Adja hozzá a következőt a paraméterfájlhoz, és mentse. Ezután cserélje le a <placeholder values> szögletes zárójeleket (<>) az értékekre.

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>'

Az alábbi táblázat a felügyelt alkalmazásdefiníció paraméterértékét ismerteti.

Paraméter Érték
managedApplicationDefinitionName A felügyelt alkalmazás definíciójának neve. Ebben a példában használja a sampleByosManagedApplication parancsot.
definitionStorageResourceID A definíciót tároló tárfiók erőforrás-azonosítója. Használja a byosstorageid változó értékét.
packageFileUri Adja meg a .zip csomagfájl URI-ját. Használja a packageuri változó értékét.
principalId A közzétevők főazonosítója, amely engedélyeket igényel a felügyelt erőforráscsoport erőforrásainak kezeléséhez. Használja a principalid változó értékét.
roleId A felügyelt erőforráscsoport engedélyeinek szerepkör-azonosítója. Például Tulajdonos, Közreműködő, Olvasó. Használja a roleid változó értékét.

A változóértékek lekérése:

  • Azure PowerShell: A PowerShellben írja be $variableName a változó értékének megjelenítéséhez.
  • Azure CLI: A Bashben írja be echo $variableName a változó értékének megjelenítéséhez.

A definíció üzembe helyezése

A felügyelt alkalmazás definíciójának üzembe helyezésekor elérhetővé válik a szolgáltatáskatalógusban. Ez a folyamat nem telepíti a felügyelt alkalmazás erőforrásait.

Hozzon létre egy byosAppDefinitionGroup nevű erőforráscsoportot, és helyezze üzembe a felügyelt alkalmazásdefiníciót a tárfiókban.

New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus

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

New-AzResourceGroupDeployment @deployparms

Definíciófájlok tárterületének ellenőrzése

Az üzembe helyezés során a sablon tulajdonsága storageAccountId a tárfiók erőforrás-azonosítóját használja, és létrehoz egy új tárolót a kis- és nagybetűk megkülönböztetésével applicationdefinitions. Az üzembe helyezés során megadott .zip csomag fájljai az új tárolóban vannak tárolva.

Az alábbi parancsokkal ellenőrizheti, hogy a felügyelt alkalmazásdefiníciós fájlok a tárfiók tárolójába vannak-e mentve.

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

Feljegyzés

A biztonság érdekében létrehozhat egy felügyelt alkalmazásdefiníciót, és tárolhatja egy Azure Storage-fiókblobban, ahol engedélyezve van a titkosítás. A definíció tartalma a tárfiók titkosítási beállításain keresztül van titkosítva. A szolgáltatáskatalógus definíciójához csak a fájl engedélyével rendelkező felhasználók férhetnek hozzá.

Tárfiók biztonságának frissítése

A sikeres üzembe helyezés után a tárfiók biztonságának javítása érdekében tiltsa le a megosztott hozzáférési kulcs tulajdonságát. A tárfiók létrehozásakor hozzáadott egy szerepkör-hozzárendelést a Storage Blob-adatszolgáltatóhoz, amely lehetővé teszi a tároló és a blobok elérését tárkulcsok használata nélkül.

A tárfiók megosztott hozzáférési kulcsbeállításainak áttekintéséhez és frissítéséhez használja az alábbi parancsokat:

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

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

Győződjön meg arról, hogy a felhasználók hozzáférhetnek a definícióhoz

Ön hozzáfér a felügyelt alkalmazás definíciójához, azonban gondoskodnia kell róla, hogy a vállalat más felhasználói is hozzáférjenek. Engedélyezzen számukra legalább Olvasó szerepkört a definícióhoz. Előfordulhat, hogy ezt a hozzáférési szintet örökölték az előfizetésből vagy az erőforráscsoportból. Annak ellenőrzéséhez, hogy kinek van hozzáférése a definícióhoz, és felhasználókat vagy csoportokat vehet fel, lépjen az Azure-szerepkörök hozzárendelése az Azure Portalon.

Az erőforrások eltávolítása

Ha telepíteni szeretné a definíciót, folytassa a következő lépésekkel , amelyek a cikkre mutató hivatkozásokat tartalmaznak a definíció üzembe helyezéséhez.

Ha végzett a felügyelt alkalmazás definíciójával, törölheti a packageStorageGroup, a byosDefinitionStorageGroup és a byosAppDefinitionGroup nevű erőforráscsoportokat.

A parancssor kéri, hogy erősítse meg, hogy el szeretné távolítani az erőforráscsoportot.

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name byosDefinitionStorageGroup

Remove-AzResourceGroup -Name byosAppDefinitionGroup

Következő lépések

Közzétette a felügyelt alkalmazásdefiníciót. Most megismerheti, hogyan helyezheti üzembe a definíció egyik példányát.