Schnellstart: Erstellen und Veröffentlichen einer Definition für die verwaltete Anwendung
Diese Schnellstartanleitung enthält eine Einführung in die Verwendung von Azure Managed Applications. Sie erstellen und veröffentlichen eine verwaltete Anwendungsdefinition, die in Ihrem Dienstkatalog gespeichert und für Mitglieder Ihrer Organisation vorgesehen ist.
Um eine verwaltete Anwendung im Dienstkatalog zu veröffentlichen, gehen Sie folgendermaßen vor:
- Erstellen Sie eine Azure Resource Manager-Vorlage (ARM-Vorlage), die die Ressourcen definiert, die mit der verwalteten Anwendung bereitgestellt werden sollen.
- Definieren Sie die Elemente der Benutzeroberfläche für das Portal, wenn Sie die verwaltete Anwendung bereitstellen.
- Erstellen Sie ein ZIP-Paket, das die erforderlichen JSON-Dateien enthält. Die .zip-Paketdatei hat einen Grenzwert von 120 MB für die verwaltete Anwendungsdefinition eines Dienstkatalogs.
- Veröffentlichen Sie die Definition der verwalteten Anwendung, damit sie in Ihrem Dienstkatalog verfügbar ist.
Wenn Ihre verwaltete Anwendungsdefinition mehr als 120 MB beträgt oder Sie ihr eigenes Speicherkonto aus Compliance-Gründen Ihrer Organisation verwenden möchten, wechseln Sie zu Schnellstart: Verwenden Ihres eigenen Speichers zum Erstellen und Veröffentlichen einer Azure Managed Application-Definition.
Sie können Bicep verwenden, um eine verwaltete Anwendungsdefinition zu entwickeln. Diese muss jedoch in eine JSON-ARM-Vorlage konvertiert werden, bevor Sie die Definition in Azure veröffentlichen können. Weitere Informationen finden Sie unter Schnellstart: Erstellen und Veröffentlichen einer Definition für eine verwaltete Azure-Anwendung mit Bicep.
Sie können Bicep auch verwenden, um eine Definition einer verwalteten Anwendung aus Ihrem Dienstkatalog bereitzustellen. Weitere Informationen finden Sie unter Schnellstart: Verwenden von Bicep zum Bereitstellen einer Definition für eine verwaltete Azure-Anwendung.
Voraussetzungen
Um diesen Schnellstart durchzuführen, benötigen Sie die folgenden Gegenstände:
- Ein Azure-Konto mit einem aktiven Abonnement und Berechtigungen für Microsoft Entra-Ressourcen wie Benutzer*innen, Gruppen oder Dienstprinzipale. Sollten Sie kein Azure-Konto haben, erstellen Sie zunächst ein kostenloses Konto.
- Visual Studio Code mit der neuesten Azure Resource Manager Tools-Erweiterung. Installieren Sie für Bicep-Dateien die Bicep-Erweiterung für Visual Studio Code.
- Installieren Sie die aktuelle Version von Azure PowerShell oder der Azure CLI.
Erstellen der ARM-Vorlage
Jede Definition einer verwalteten Anwendung enthält eine Datei namens mainTemplate.json. Die Vorlage definiert die zu bereitstellenden Azure-Ressourcen und unterscheidet sich nicht von einer regulären ARM-Vorlage.
Öffnen Sie Visual Studio Code, erstellen Sie eine Datei mit dem Groß-/Kleinschreibungsnamen mainTemplate.json, und speichern Sie sie.
Fügen Sie den folgenden JSON-Code hinzu, und speichern Sie die Datei. Die Ressourcen für die Bereitstellung einer App Service-Instanz und eines App Service-Plans werden damit definiert. Die Vorlage verwendet den App Service-Plan „Basic“ (B1) mit nutzungsbasierter Bezahlung. Weitere Informationen finden Sie unter Preise für Azure App Service für Linux.
{
"$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]"
}
}
}
Definieren Sie Ihre Portalbenutzeroberfläche
Als Herausgeber definieren Sie die Portalbenutzeroberfläche zum Erstellen der verwalteten Anwendung. Die createUiDefinition.json-Datei generiert die Portalbenutzeroberfläche. Sie definieren mithilfe von Steuerelementen, z. B. Drop-down-Menüs und Textfeldern, wie Benutzer Werte für die einzelnen Parameter eingeben.
In diesem Beispiel werden Sie auf der Benutzeroberfläche aufgefordert, das Präfix des App Service-Namens und den Namen des App Service-Plans einzugeben. Während der Bereitstellung von mainTemplate.json verwenden die appServiceName
-Variablen die uniqueString
-Funktion, um eine 13-stellige Zeichenfolge an das Namenspräfix anzufügen, damit der Name in Azure global eindeutig ist.
Öffnen Sie Visual Studio Code, erstellen Sie eine Datei mit dem Namen createUiDefinition.json, und speichern Sie sie.
Fügen Sie der Datei den folgenden JSON-Code hinzu, und speichern Sie sie.
{
"$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]"
}
}
}
Weitere Informationen finden Sie unter Erstellen einer Benutzeroberfläche im Azure-Portal für die verwaltete Anwendung.
Erstellen eines Pakets aus den Dateien
Fügen Sie die beiden Dateien einer Paketdatei mit dem Namen app.zip hinzu. Die zwei Dateien müssen sich auf der Stammebene der ZIP-Datei befinden. Wenn sich die Dateien bei der Erstellung der verwalteten Anwendungsdefinition in einem Ordner befinden, erhalten Sie eine Fehlermeldung, die besagt, dass die erforderlichen Dateien nicht vorhanden sind.
Laden Sie die app.zip-Paketdatei in ein Azure-Speicherkonto hoch, damit Sie sie verwenden können, wenn Sie die verwaltete Anwendungsdefinition bereitstellen. Der Name des Speicherkontos muss global eindeutig sein, und die Länge muss 3-24 Zeichen mit nur Kleinbuchstaben und Zahlen sein. Ersetzen Sie im Befehl den Platzhalter <pkgstorageaccountname>
, einschließlich der spitzen Klammern (<>
), durch Ihren eindeutigen Speicherkontonamen.
Öffnen Sie in Visual Studio Code ein neues PowerShell-Terminal, und melden Sie sich bei Ihrem Azure-Abonnement an.
Connect-AzAccount
Der Befehl öffnet Ihren Standardbrowser und fordert Sie auf, sich bei Azure anzumelden. Weitere Informationen finden Sie unter Anmelden mit Azure PowerShell.
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
Die $pkgstorageparms
Variable verwendet die PowerShell-Splatting, um die Lesbarkeit der Parameterwerte zu verbessern, die im Befehl zum Erstellen des neuen Speicherkontos verwendet werden. Splatting wird in anderen PowerShell-Befehlen verwendet, die mehrere Parameterwerte verwenden.
Fügen Sie nach dem Erstellen des Speicherkontos die Rollenzuweisung Mitwirkender an Speicherblobdaten zum Speicherkontobereich hinzu. Weisen Sie Ihrem Microsoft Entra-Benutzerkonto Zugriff zu. Je nachdem, über welche Zugriffsebene Sie in Azure verfügen, müssen Ihnen von Ihrem Administrator möglicherweise weitere Berechtigungen zugewiesen werden. Weitere Informationen finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten und Zuweisen von Azure-Rollen über das Azure-Portal.
Nachdem Sie die Rolle zum Speicherkonto hinzugefügt haben, dauert es einige Minuten, bis die Änderung in Azure aktiv ist. Anschließend können Sie den erforderlichen Kontext erstellen, um den Container zu erstellen und die Datei hochzuladen.
$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
Erstellen der Definition für die verwaltete Anwendung
In diesem Abschnitt rufen Sie Identitätsinformationen aus Microsoft Entra ID ab, erstellen eine Ressourcengruppe und stellen die Definition der verwalteten Anwendung bereit.
Abrufen der Gruppen-ID und Rollendefinitions-ID
Der nächste Schritt besteht darin, einen Benutzer, eine Sicherheitsgruppe oder eine Anwendung für das Verwalten der Ressourcen für den Kunden auszuwählen. Diese Identität verfügt in der verwalteten Ressourcengruppe über Berechtigungen entsprechend der zugewiesenen Rolle. Die Rolle kann eine beliebige integrierte Azure-Rolle wie „Besitzer“ oder „Mitwirkender“ sein.
In diesem Beispiel wird eine Sicherheitsgruppe verwendet, und Ihr Microsoft Entra-Konto sollte Mitglied der Gruppe sein. Um die Objekt-ID der Gruppe abzurufen, ersetzen Sie den Platzhalter <managedAppDemo>
, einschließlich der spitzen Klammern (<>
), durch den Namen Ihrer Gruppe. Sie verwenden den Wert der Variable, wenn Sie die verwaltete Anwendungsdefinition bereitstellen.
Um eine neue Microsoft Entra-Gruppe zu erstellen, wechseln Sie zu Verwalten von Microsoft Entra-Gruppen und -Gruppenmitgliedschaft.
$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id
Als Nächstes benötigen Sie die Rollendefinitions-ID der integrierten Azure-Rolle, der Sie Zugriff auf den Benutzer, die Gruppe oder Anwendung gewähren möchten. Sie verwenden den Wert der Variable, wenn Sie die verwaltete Anwendungsdefinition bereitstellen.
$roleid=(Get-AzRoleDefinition -Name Owner).Id
Veröffentlichen der Definition der verwalteten Anwendung
Erstellen Sie eine Ressourcengruppe für Ihre verwaltete Anwendungsdefinition.
New-AzResourceGroup -Name appDefinitionGroup -Location westus
Der Befehl blob
erstellt eine Variable zum Speichern der URL für die .zip-Paketdatei. Diese Variable wird in dem Befehl verwendet, der die Definition der verwalteten Anwendung erstellt.
$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
Nachdem die Ausführung des Befehls abgeschlossen ist, verfügen Sie in Ihrer Ressourcengruppe über eine Definition für die verwaltete Anwendung.
Im vorigen Beispiel werden u.a. folgende Parameter verwendet:
ResourceGroupName
: Der Name der Ressourcengruppe, in der die Definition der verwalteten Anwendung erstellt wird.LockLevel
: DielockLevel
in der verwalteten Ressourcengruppe verhindert, dass der Kunde unerwünschte Vorgänge für diese Ressourcengruppe ausführt. Derzeit istReadOnly
die einzige unterstützte Sperrebene.ReadOnly
gibt an, dass die in der verwalteten Ressourcengruppe vorhandenen Ressourcen für den Kunden schreibgeschützt sind. Die Herausgeberidentitäten, denen Zugriff auf die verwaltete Ressourcengruppe gewährt wird, sind von dieser Sperrebene ausgeschlossen.Authorization
: Beschreibt die Prinzipal-ID und die Rollendefinitions-ID, die zum Erteilen von Berechtigungen für die verwaltete Ressourcengruppe verwendet werden."${principalid}:$roleid"
, oder Sie können geschweifte Klammern für jede Variable verwenden:"${principalid}:${roleid}"
.- Verwenden Sie ein Komma zum Trennen mehrerer Werte:
"${principalid1}:$roleid1", "${principalid2}:$roleid2"
.
PackageFileUri
: Der Speicherort eines ZIP-Pakets, das die erforderlichen Dateien enthält.
Sicherstellen, dass Benutzer Ihre Definition sehen können
Sie haben zwar Zugriff auf die Definition der verwalteten Anwendung, möchten aber sicherstellen, dass andere Benutzer in Ihrer Organisation darauf zugreifen können. Erteilen Sie ihnen mindestens die Leserrolle für die Definition. Diese Zugriffsebene haben sie möglicherweise vom Abonnement oder von der Ressourcengruppe geerbt. Informationen zum Überprüfen, wer Zugriff auf die Definition hat, sowie zum Hinzufügen von Benutzern oder Gruppen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.
Bereinigen von Ressourcen
Wenn Sie die Definition bereitstellen möchten, fahren Sie mit dem Abschnitt Nächste Schritte fort, der mit dem Artikel zum Bereitstellen der Definition verknüpft ist.
Wenn Sie die Definition für eine verwaltete Anwendung fertiggestellt haben, können Sie die von Ihnen erstellten Ressourcengruppen mit dem Namen packageStorageGroup und appDefinitionGroup löschen.
Der Befehl fordert Sie auf, zu bestätigen, dass Sie die Ressourcengruppe entfernen wollen.
Remove-AzResourceGroup -Name packageStorageGroup
Remove-AzResourceGroup -Name appDefinitionGroup
Nächste Schritte
Sie haben die Definition für die verwaltete Anwendung veröffentlicht. Im nächsten Schritt erfahren Sie, wie Sie eine Instanz dieser Definition bereitstellen.