Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure Developer CLI(azd) wurde erweitert, um die Bereitstellung von Aspire-Projekten zu unterstützen. Verwenden Sie dieses Handbuch, um den Prozess des Erstellens und Bereitstellens eines Aspire-Projekts auf Azure Container Apps mithilfe des Azure Developer CLI zu durchlaufen. In diesem Lernprogramm lernen Sie die folgenden Konzepte kennen:
- Erfahren Sie, wie
azddie Integration mit Aspire Projekten funktioniert - Bereitstellen und Implementieren von Ressourcen auf Azure für ein Aspire Projekt mit
azd - Generieren von Bicep-Infrastruktur und anderen Vorlagendateien mithilfe von
azd
Voraussetzungen
Um mit Aspireihnen zu arbeiten, benötigen Sie folgendes lokal installiert:
-
.NET 8,0 oder .NET 9,0.
- Aspire Ab 9.4 .NET wird 10 Preview 5 oder höher unterstützt.
- Eine OCI-kompatible Containerlaufzeit, z. B.:
- Docker Desktop oder Podman. Weitere Informationen finden Sie unter container runtime.
- Eine integrierte Entwicklerumgebung (Integrated Developer Environment, IDE) oder ein Code-Editor, z. B.:
- Visual Studio 2022 , Version 17.9 oder höher (optional)
-
Visual Studio Code (optional)
- C# Dev Kit: Erweiterung (Optional)
- JetBrains Rider mit Aspire Plug-In (Optional)
Weitere Informationen finden Sie unter Aspire Setup und Tooling und Aspire SDK.
Außerdem müssen Sie die Azure Developer CLIinstallation lokal ausführen. Zu den allgemeinen Installationsoptionen gehören die folgenden:
Wie Azure Developer CLI Integration funktioniert
Der azd init Workflow bietet angepasste Unterstützung für Aspire Projekte. Das folgende Diagramm veranschaulicht, wie dieser Fluss konzeptionell funktioniert und wie azd und Aspire integriert wird:
- Wenn
azdein Aspire Projekt anvisiert, startet es den AppHost mit einem speziellen Befehl (dotnet run --project AppHost.csproj --output-path manifest.json --publisher manifest), der die AspireManifestdatei erzeugt. - Die Manifestdatei wird von der
azd provisionUnterbefehlslogik abgefragt, um nur Bicep-Dateien im Arbeitsspeicher zu generieren (standardmäßig). - Nach dem Generieren der Bicep-Dateien wird eine Bereitstellung mithilfe der ARM-APIs von Azure für das zuvor angegebene Abonnement und die Ressourcengruppe ausgelöst.
- Nachdem die zugrunde liegenden Azure Ressourcen konfiguriert wurden, wird die
azd deployUnterbefehlslogik ausgeführt, die dieselbe Aspire Manifestdatei verwendet. - Im Zuge der Bereitstellung ruft
azdeine integrierte Unterstützung für die Containerveröffentlichung vondotnet publishauf, um Container-Images zu generieren. - Nachdem
azddie Containerimages erstellt hat, überträgt es sie an das ACR-Registry, das während der Bereitstellungsphase erstellt wurde. - Nachdem sich das Containerimage in ACR befindet, aktualisiert
azddie Ressource mit ARM, um mit der Nutzung der neuen Version des Containerimages zu beginnen.
Hinweis
azd ermöglicht Ihnen auch, die generierte Bicep in einen infra Ordner Ihres Projekts zu exportieren, über den Sie mehr im Abschnitt Generieren von Bicep aus dem Aspire App-Modell lesen können.
Einrichten und Bereitstellen einer Aspire Starter-App
Die Schritte in diesem Abschnitt veranschaulichen, wie Sie eine Aspire Startanwendung erstellen und die Bereitstellung und Implementierung der App-Ressourcen für Azure mithilfe von azd bearbeiten.
Erstellen der Aspire Start-App
Erstellen Sie ein neues Aspire Projekt mit dem dotnet new Befehl. Sie können das Projekt auch mithilfe von Visual Studio.
dotnet new aspire-starter --use-redis-cache -o AspireSample
cd AspireSample
dotnet run --project AspireSample.AppHost\AspireSample.AppHost.csproj
Die vorherigen Befehle erstellen ein neues Aspire Projekt basierend auf der aspire-starter Vorlage, die eine Abhängigkeit vom Redis Cache enthält. Es führt das Aspire Projekt aus, das überprüft, ob alles ordnungsgemäß funktioniert.
Initialisieren der Vorlage
Öffnen Sie ein neues Terminalfenster und
cdin das Verzeichnis Ihrer Aspire Lösung.Führen Sie den befehl
azd initaus, um Ihr Projekt mitazdzu initialisieren, wodurch die lokale Verzeichnisstruktur überprüft und der App-Typ bestimmt wird.azd initWeitere Informationen zum
azd init-Befehl finden Sie unter azd init.Wählen Sie "Code im aktuellen Verzeichnis verwenden" aus, wenn
azdIhnen drei Optionen zur App-Initialisierung angeboten werden.? How do you want to initialize your app? [Use arrows to move, type to filter] > Use code in the current directory Select a template Create a minimal projectNach dem Scannen des Verzeichnisses werden Sie aufgefordert, zu bestätigen,
azddass es das richtige AspireAppHost-Projekt gefunden hat. Wählen Sie die Option Bestätigen und mit der Initialisierung meiner App fortfahren.Detected services: .NET (Aspire) Detected in: D:\source\repos\AspireSample\AspireSample.AppHost\AspireSample.AppHost.csproj azd will generate the files necessary to host your app on Azure using Azure Container Apps. ? Select an option [Use arrows to move, type to filter] > Confirm and continue initializing my app Cancel and exitGeben Sie einen Umgebungsnamen ein, der verwendet wird, um bereitgestellte Ressourcen in Azure zu benennen und verschiedene Umgebungen wie
devundprodzu verwalten.Generating files to run your app on Azure: (✓) Done: Generating ./azure.yaml (✓) Done: Generating ./next-steps.md SUCCESS: Your app is ready for the cloud! You can provision and deploy your app to Azure by running the azd up command in this directory. For more information on configuring your app, see ./next-steps.md
azd generiert eine Reihe von Dateien und platziert sie in das Arbeitsverzeichnis. Diese Dateien sind:
- azure.yaml: Beschreibt die Dienste der App, z. B. Aspire AppHost-Projekt, und ordnet sie Azure Ressourcen zu.
-
.azure/config.json: Konfigurationsdatei, die
azdinformiert, was die aktuelle aktive Umgebung ist. - .azure/aspireazddev/.env: Enthält umgebungsspezifische Überschreibungen.
Die Datei "azure.yaml " hat den folgenden Inhalt:
# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
name: AspireSample
services:
app:
language: dotnet
project: .\AspireSample.AppHost\AspireSample.AppHost.csproj
host: containerapp
Ressourcen-Namensgebung
Wenn Sie neue Azure Ressourcen erstellen, ist es wichtig, die Benennungsanforderungen zu erfüllen. Für Azure Container Apps muss der Name zwischen 2 und 32 Zeichen lang sein und aus Kleinbuchstaben, Zahlen und Bindestrichen bestehen. Der Name muss mit einem Buchstaben beginnen und mit einem alphanumerischen Zeichen enden.
Weitere Informationen finden Sie unter Benennungsregeln und Einschränkungen für Azure Ressourcen.
Erste Bereitstellung
Um das Aspire Projekt bereitzustellen, authentifizieren Sie sich bei Azure AD, um die Ressourcenverwaltungs-APIs Azure aufzurufen.
azd auth loginDer vorherige Befehl startet einen Browser, um die Befehlszeilensitzung zu authentifizieren.
Führen Sie nach der Authentifizierung den folgenden Befehl aus dem AppHost-Projektverzeichnis aus, um die Anwendung bereitzustellen und bereitzufügen.
azd upVon Bedeutung
Um Container-Images an die Azure Containerregistrierung (Container Registry, ACR) zu übertragen, müssen Sie
Microsoft.Authorization/roleAssignments/writeZugriff haben. Dies kann erreicht werden, indem ein Administratorbenutzer in der Registrierung aktiviert wird. Öffnen Sie das Azure Portal, navigieren Sie zu der ACR-Ressource /Einstellungen/Zugriffstasten, und aktivieren Sie dann das Kontrollkästchen "Administratorbenutzer ". Weitere Informationen finden Sie unter "Administratorbenutzer aktivieren".Wenn Sie dazu aufgefordert werden, wählen Sie das Abonnement und den Speicherort aus, in dem die Ressourcen bereitgestellt werden sollen. Sobald diese Optionen ausgewählt sind, wird das Aspire Projekt bereitgestellt.
By default, a service can only be reached from inside the Azure Container Apps environment it is running in. Selecting a service here will also allow it to be reached from the Internet. ? Select which services to expose to the Internet webfrontend ? Select an Azure Subscription to use: 1. <YOUR SUBSCRIPTION> ? Select an Azure location to use: 1. <YOUR LOCATION> Packaging services (azd package) Provisioning Azure resources (azd provision) Provisioning Azure resources can take some time. Subscription: <YOUR SUBSCRIPTION> Location: <YOUR LOCATION> You can view detailed progress in the Azure Portal: <LINK TO DEPLOYMENT> (✓) Done: Resource group: <YOUR RESOURCE GROUP> (✓) Done: Container Registry: <ID> (✓) Done: Log Analytics workspace: <ID> (✓) Done: Container Apps Environment: <ID> SUCCESS: Your application was provisioned in Azure in 1 minute 13 seconds. You can view the resources created under the resource group <YOUR RESOURCE GROUP> in Azure Portal: <LINK TO RESOURCE GROUP OVERVIEW> Deploying services (azd deploy) (✓) Done: Deploying service apiservice - Endpoint: <YOUR UNIQUE apiservice APP>.azurecontainerapps.io/ (✓) Done: Deploying service webfrontend - Endpoint: <YOUR UNIQUE webfrontend APP>.azurecontainerapps.io/ Aspire Dashboard: <LINK TO DEPLOYED Aspire DASHBOARD> SUCCESS: Your up workflow to provision and deploy to Azure completed in 3 minutes 50 seconds.Die letzte Ausgabezeile des
azdBefehls ist ein Link zum Azure Portal, der alle Azure bereitgestellten Ressourcen anzeigt:
In dieser Anwendung werden drei Container bereitgestellt:
-
webfrontend: Enthält Code aus dem Webprojekt in der Startvorlage. -
apiservice: Enthält Code aus dem API-Dienstprojekt in der Startvorlage. -
cache: Ein Redis Containerimage zum Bereitstellen eines Caches an das Front-End.
Genau wie bei der lokalen Entwicklung wurde die Konfiguration von Verbindungszeichenfolgen automatisch behandelt. In diesem Fall azd war verantwortlich für die Interpretation des Anwendungsmodells und die Übersetzung in die entsprechenden Bereitstellungsschritte. Betrachten Sie beispielsweise die Verbindungszeichenfolgen und Dienstermittlungsvariablen, die in den webfrontend Container eingefügt werden, damit er weiß, wie er eine Verbindung mit dem Redis Cache und apiservice herstellen kann.
Weitere Informationen dazu, wie Aspire Projekte Verbindungszeichenfolgen und Dienstermittlung behandeln, finden Sie in Aspire der Übersicht über die Orchestrierung.
Bereitstellen von Anwendungsupdates
Wenn der azd up Befehl ausgeführt wird, werden die zugrunde liegenden Azure Ressourcen bereitgestellt , und ein Containerimage wird erstellt und in den Container-Apps bereitgestellt , die das Aspire Projekt hosten. Normalerweise wird, sobald die Entwicklung im Gange ist und Azure Ressourcen bereitgestellt sind, es nicht erforderlich sein, bei jeder Aktualisierung des Codes Azure Ressourcen bereitzustellen. Dies gilt insbesondere für die interne Schleife des Entwicklers.
Um die Bereitstellung von Codeänderungen zu beschleunigen, azd unterstützt die Bereitstellung von Codeupdates im Containerimage. Dazu wird der azd deploy Befehl verwendet:
azd deploy
Deploying services (azd deploy)
(✓) Done: Deploying service apiservice
- Endpoint: <YOUR UNIQUE apiservice APP>.azurecontainerapps.io/
(✓) Done: Deploying service webfrontend
- Endpoint: <YOUR UNIQUE webfrontend APP>.azurecontainerapps.io/
Aspire Dashboard: <LINK TO DEPLOYED Aspire DASHBOARD>
Es ist nicht erforderlich, alle Dienste jedes Mal bereitzustellen.
azd versteht das Aspire Projektmodell, es ist möglich, nur einen der mit dem folgenden Befehl angegebenen Dienste bereitzustellen:
azd deploy webfrontend
Weitere Informationen finden Sie unter Azure Developer CLI Referenz: azd deploy.
Bereitstellen von Infrastrukturupdates
Wenn sich die Abhängigkeitsstruktur innerhalb eines Aspire Projekts ändert, azd müssen die zugrunde liegenden Azure Ressourcen erneut bereitgestellt werden. Der azd provision Befehl wird verwendet, um diese Änderungen auf die Infrastruktur anzuwenden.
Um dies in Aktion zu sehen, aktualisieren Sie die AppHost.cs Datei im AppHost-Projekt wie folgt:
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("cache");
// Add the locations database.
var locationsdb = builder.AddPostgres("db").AddDatabase("locations");
// Add the locations database reference to the API service.
var apiservice = builder.AddProject<Projects.AspireSample_ApiService>("apiservice")
.WithReference(locationsdb);
builder.AddProject<Projects.AspireSample_Web>("webfrontend")
.WithReference(cache)
.WithReference(apiservice);
builder.Build().Run();
Speichern Sie die Datei, und stellen Sie den folgenden Befehl aus:
azd provision
Der azd provision Befehl aktualisiert die Infrastruktur, indem eine Container-App zum Hosten der Postgres Datenbank erstellt wird. Der azd provision Befehl hat die Verbindungszeichenfolgen für den apiservice Container nicht aktualisiert. Damit Verbindungszeichenfolgen so aktualisiert werden, dass sie auf die neu bereitgestellte Postgres Datenbank verweisen, muss der azd deploy Befehl erneut aufgerufen werden. Verwenden Sie im Zweifelsfall azd up, um sowohl die Bereitstellung als auch den Einsatz durchzuführen.
Bereinigen von Ressourcen
Denken Sie daran, die Azure Ressourcen zu bereinigen, die Sie während dieser Schritt-für-Schritt-Anleitung erstellt haben. Da azd die Ressourcengruppe kennt, in der es die Ressourcen erstellt hat, kann es zum Herunterfahren der Umgebung mit dem folgenden Befehl verwendet werden:
azd down
Der vorherige Befehl kann einige Zeit in Anspruch nehmen, aber sobald er abgeschlossen ist, sollten die Ressourcengruppe und alle zugehörigen Ressourcen gelöscht werden.
Deleting all resources and deployed code on Azure (azd down)
Local application code is not deleted when running 'azd down'.
Resource group(s) to be deleted:
• <YOUR RESOURCE GROUP>: <LINK TO RESOURCE GROUP OVERVIEW>
? Total resources to delete: 7, are you sure you want to continue? Yes
Deleting your resources can take some time.
(✓) Done: Deleting resource group: <YOUR RESOURCE GROUP>
SUCCESS: Your application was removed from Azure in 9 minutes 59 seconds.
Generieren von Bicep aus dem Aspire Projektmodell
Obwohl Entwicklungsteams die Befehle azd up (oder azd provision und azd deploy) sowohl für Entwicklungs- als auch für Produktionszwecke frei verwenden können, entscheiden sich einige Teams dafür, Bicep-Dateien zu erstellen, die sie im Rahmen der Versionssteuerung überprüfen und verwalten können (dies ermöglicht auch, dass auf diese Bicep-Dateien als Teil einer größeren, komplexeren Azure Bereitstellung verwiesen wird).
Umfassende Anleitungen zum Anpassen der generierten Infrastruktur für Produktionsszenarien finden Sie unter Anpassen von AspireAzure Bereitstellungen.
azd umfasst die Möglichkeit, den Bicep-Code auszugeben, der für die Bereitstellung mittels des folgenden Befehls verwendet wird:
azd config set alpha.infraSynth on
azd infra gen
Nachdem dieser Befehl im Beispiel der Startvorlage in diesem Leitfaden ausgeführt wurde, werden die folgenden Dateien im AppHost-Projektverzeichnis erstellt:
- infra/main.bicep: Stellt den Haupteinstiegspunkt für die Bereitstellung dar.
- infra/main.parameters.json: Wird als Parameter für die Haupt-Bicep verwendet (ordnet Umgebungsvariablen zu, die im Azure-Ordner definiert sind).
- infra/resources.bicep: Definiert die ressourcen, die Azure für die Unterstützung des Aspire Projektmodells erforderlich sind.
-
AspireSample.Web/manifests/containerApp.tmpl.yaml: Die Container-App-Definition für
webfrontend. -
AspireSample.ApiService/manifests/containerApp.tmpl.yaml: Die Container-App-Definition für
apiservice.
Die Datei "infra\resources.bicep " enthält keine Definition der Container-Apps selbst (mit Ausnahme von Container-Apps, die als Abhängigkeiten fungieren, wie Redis und Postgres):
@description('The location used for all deployed resources')
param location string = resourceGroup().location
@description('Tags that will be applied to all resources')
param tags object = {}
var resourceToken = uniqueString(resourceGroup().id)
resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: 'mi-${resourceToken}'
location: location
tags: tags
}
resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-07-01' = {
name: replace('acr-${resourceToken}', '-', '')
location: location
sku: {
name: 'Basic'
}
tags: tags
}
resource caeMiRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(containerRegistry.id, managedIdentity.id, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d'))
scope: containerRegistry
properties: {
principalId: managedIdentity.properties.principalId
principalType: 'ServicePrincipal'
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')
}
}
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
name: 'law-${resourceToken}'
location: location
properties: {
sku: {
name: 'PerGB2018'
}
}
tags: tags
}
resource containerAppEnvironment 'Microsoft.App/managedEnvironments@2023-05-01' = {
name: 'cae-${resourceToken}'
location: location
properties: {
appLogsConfiguration: {
destination: 'log-analytics'
logAnalyticsConfiguration: {
customerId: logAnalyticsWorkspace.properties.customerId
sharedKey: logAnalyticsWorkspace.listKeys().primarySharedKey
}
}
}
tags: tags
}
resource cache 'Microsoft.App/containerApps@2023-05-02-preview' = {
name: 'cache'
location: location
properties: {
environmentId: containerAppEnvironment.id
configuration: {
service: {
type: 'redis'
}
}
template: {
containers: [
{
image: 'redis'
name: 'redis'
}
]
}
}
tags: union(tags, {'aspire-resource-name': 'cache'})
}
resource locations 'Microsoft.App/containerApps@2023-05-02-preview' = {
name: 'locations'
location: location
properties: {
environmentId: containerAppEnvironment.id
configuration: {
service: {
type: 'postgres'
}
}
template: {
containers: [
{
image: 'postgres'
name: 'postgres'
}
]
}
}
tags: union(tags, {'aspire-resource-name': 'locations'})
}
output MANAGED_IDENTITY_CLIENT_ID string = managedIdentity.properties.clientId
output AZURE_CONTAINER_REGISTRY_ENDPOINT string = containerRegistry.properties.loginServer
output AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID string = managedIdentity.id
output AZURE_CONTAINER_APPS_ENVIRONMENT_ID string = containerAppEnvironment.id
output AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN string = containerAppEnvironment.properties.defaultDomain
Weitere Informationen zur Verwendung von Bicep zur Automatisierung von Bereitstellungen finden Sie unter Azure, „Was ist Bicep?“
Die Definition der Container-Apps aus den .NET Dienstprojekten ist in den containerApp/tmpl.yaml-Dateien im manifests Verzeichnis in jedem Projekt enthalten. Hier ist ein Beispiel aus dem webfrontend Projekt:
location: {{ .Env.AZURE_LOCATION }}
identity:
type: UserAssigned
userAssignedIdentities:
? "{{ .Env.AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID }}"
: {}
properties:
environmentId: {{ .Env.AZURE_CONTAINER_APPS_ENVIRONMENT_ID }}
configuration:
activeRevisionsMode: single
ingress:
external: true
targetPort: 8080
transport: http
allowInsecure: false
registries:
- server: {{ .Env.AZURE_CONTAINER_REGISTRY_ENDPOINT }}
identity: {{ .Env.AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID }}
template:
containers:
- image: {{ .Env.SERVICE_WEBFRONTEND_IMAGE_NAME }}
name: webfrontend
env:
- name: AZURE_CLIENT_ID
value: {{ .Env.MANAGED_IDENTITY_CLIENT_ID }}
- name: ConnectionStrings__cache
value: {{ connectionString "cache" }}
- name: OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES
value: "true"
- name: OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES
value: "true"
- name: APISERVICE_HTTP
value: http://apiservice.internal.{{ .Env.AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN }}
- name: APISERVICE_HTTPS
value: https://apiservice.internal.{{ .Env.AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN }}
- name: services__apiservice__http__0
value: http://apiservice.internal.{{ .Env.AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN }}
- name: services__apiservice__https__0
value: https://apiservice.internal.{{ .Env.AZURE_CONTAINER_APPS_ENVIRONMENT_DEFAULT_DOMAIN }}
tags:
azd-service-name: webfrontend
aspire-resource-name: webfrontend
Nachdem der azd infra gen Befehl ausgeführt wurde, verwenden azd provision und azd deploy die Bicep- und unterstützenden generierten Dateien, wenn sie aufgerufen werden.
Von Bedeutung
Wenn azd infra gen erneut aufgerufen wird, ersetzt es alle geänderten Dateien durch neu generierte und fordert eine Bestätigung an, bevor es dies tut.
Isolierte Umgebungen für das Debuggen
Da azd es einfacher ist, neue Umgebungen bereitzustellen, ist es für jedes Teammitglied möglich, eine isolierte cloudgehostete Umgebung für das Debuggen von Code in einer Einstellung zu haben, die eng mit der Produktion übereinstimmt. Wenn Sie dies tun, sollte jedes Teammitglied eine eigene Umgebung mit dem folgenden Befehl erstellen:
azd env new
Dadurch wird der Benutzer erneut aufgefordert, Abonnement- und Informationen zur Ressourcengruppe einzugeben. Nachfolgende azd up, azd provision und azd deploy Aufrufe verwenden diese neue Umgebung standardmäßig. Der --environment Schalter kann auf diese Befehle angewendet werden, um zwischen Umgebungen zu wechseln.
Bereinigen von Ressourcen
Führen Sie den folgenden Azure CLI-Befehl aus, um die Ressourcengruppe zu löschen, wenn Sie die von Ihnen erstellten Azure Ressourcen nicht mehr benötigen. Durch das Löschen der Ressourcengruppe werden auch die darin enthaltenen Ressourcen gelöscht.
az group delete --name <your-resource-group-name>
Weitere Informationen finden Sie unter Ressourcen bereinigen in Azure.