Tutorial: Menyambungkan aplikasi ASP.NET Core ke integrasi penyimpanan .NET Aspire
Aplikasi cloud-native sering memerlukan solusi penyimpanan yang dapat diskalakan yang menyediakan kemampuan seperti penyimpanan blob, antrean, atau database NoSQL semi terstruktur. Integrasi .NET Aspire menyederhanakan koneksi ke berbagai layanan penyimpanan, seperti Azure Blob Storage. Dalam tutorial ini, Anda akan membuat aplikasi ASP.NET Core yang menggunakan integrasi .NET Aspire untuk terhubung ke Azure Blob Storage dan Azure Queue Storage untuk mengirimkan tiket dukungan. Aplikasi mengirimkan tiket ke antrean untuk diproses dan mengunggah lampiran ke penyimpanan. Anda akan mempelajari cara:
- Membuat aplikasi .NET dasar yang disiapkan untuk menggunakan integrasi .NET Aspire
- Menambahkan integrasi .NET.NET Aspire untuk menyambungkan ke beberapa layanan penyimpanan
- Mengonfigurasi dan menggunakan fitur Komponen .NET.NET Aspire untuk mengirim dan menerima data
Prasyarat
Untuk bekerja dengan .NET.NET Aspire, Anda memerlukan hal berikut yang diinstal secara lokal:
- .NET 8.0 atau .NET 9.0
- Sistem runtime kontainer yang sesuai dengan OCI, seperti:
- Docker Desktop atau Podman. Untuk informasi lebih lanjut, lihat Container runtime.
- Lingkungan Pengembang Terintegrasi (IDE) atau editor kode, seperti:
- Visual Studio 2022 versi 17.9 atau lebih tinggi (Opsional)
-
Visual Studio Code (Opsional)
- C# Dev Kit: Ekstensi (Opsional)
- JetBrains Rider dengan plugin .NET.NET Aspire (Opsional)
Untuk informasi selengkapnya, lihat penyiapan dan alat .NET.NET Aspire, dan .NET.NET Aspire SDK.
Menjelajahi aplikasi sampel yang telah selesai
Versi lengkap aplikasi sampel dari tutorial ini tersedia di GitHub. Proyek ini juga disusun sebagai templat untuk Azure Developer CLI, yang berarti Anda dapat menggunakan perintah azd up
untuk mengotomatiskan provisi sumber daya Azure jika Anda memiliki alat diinstal.
git clone https://github.com/Azure-Samples/dotnet-aspire-connect-storage.git
Menyiapkan sumber daya Azure Storage
Untuk artikel ini, Anda memerlukan akses kontributor data ke akun Azure Storage dengan kontainer blob dan antrean penyimpanan. Pastikan Anda memiliki sumber daya dan konfigurasi berikut yang tersedia:
Untuk artikel ini, Anda harus membuat kontainer blob dan sumber daya antrean penyimpanan di lingkungan pengembangan lokal Anda menggunakan emulator. Untuk melakukannya, gunakan Azurite. Azurite adalah server yang kompatibel dengan API Penyimpanan (emulator) gratis, sumber terbuka, lintas platform Azure storage yang berjalan dalam kontainer Docker.
Untuk menggunakan emulator, Anda perlu menginstal Azurite.
- Akun Penyimpanan Azure - Membuat akun penyimpanan.
- Kontainer Blob Storage bernama fileuploads - Membuat kontainer penyimpanan blob.
- Sebuah Antrian Penyimpanan bernama tiket - Membuat antrian penyimpanan.
Jalankan perintah berikut di Azure CLI atau CloudShell untuk menyiapkan sumber daya Azure Storage yang diperlukan:
az group create --name aspirestorage --location eastus2
az storage account create -n aspirestorage -g aspirestorage -l eastus2
az storage container create -n fileuploads --account-name aspirestorage
az storage queue create -n tickets --account-name aspirestorage
Anda juga perlu menetapkan peran berikut kepada akun pengguna yang Anda gunakan untuk masuk ke Visual Studio:
- Kontributor Data Blob Penyimpanan - Menetapkan peran RBAC Azure
- Kontributor Data Antrean Penyimpanan - Menetapkan peran RBAC Azure
Azure Developer CLI memungkinkan Anda menyediakan dan menyebarkan sumber daya Azure menggunakan sistem templat. Tutorial ini menyediakan templat lengkap
Jalankan
azd auth login
untuk masuk ke Azure:azd auth login
Jalankan
azd init
untuk mengkloning dan menginisialisasi templat sampel:azd init --template dotnet-aspire-connect-storage
Jalankan
azd up
untuk menyediakan sumber daya Azure:azd up
Saat diminta, pilih langganan dan wilayah Azure untuk sumber daya yang disediakan. Templat menjalankan dan menyelesaikan tugas berikut untuk Anda:
- Membuat Akun Penyimpanan Azure dengan layanan blob dan antrean diaktifkan
- Membuat kontainer penyimpanan blob bernama
fileUploads
- Membuat antrian bernama
tickets
- Menetapkan peran berikut ke akun pengguna yang menjalankan templat.
- Kontributor Data Blob Penyimpanan
- Kontributor Data Antrian Penyimpanan
Setelah operasi berhasil diselesaikan, Anda memiliki dua opsi bergerak maju:
- Opsi 1: Jalankan aplikasi sampel .NET di templat
src
direktori untuk bereksperimen dengan aplikasi yang telah selesai. - Opsi 2: Buat aplikasi sampel langkah demi langkah menggunakan bagian di depan dan sambungkan ke sumber daya Azure yang disediakan oleh
azd
.
Membuat solusi sampel
Buat proyek .NET Aspire menggunakan Visual Studio atau CLI .NET.
- Di bagian atas Visual Studio, navigasikan ke File >Proyek>Baru.
- Di jendela dialog, cari Aspire dan pilih .NET.NET Aspire Aplikasi Starter. Pilih Berikutnya.
- Pada layar Konfigurasikan proyek baru Anda:
- Masukkan Nama Solusi dari AspireStorage dan pilih Berikutnya.
- Pada layar informasi tambahan:
- Hapus centang dan gunakan Redis untuk cache (tidak diperlukan untuk tutorial ini).
- Pilih Buat.
Visual Studio membuat solusi ASP.NET Core baru yang terstruktur untuk menggunakan .NET Aspire.
Solusinya terdiri dari proyek-proyek berikut:
- AspireStorage.ApiService - Proyek API dengan konfigurasi layanan .NET.NET Aspire default.
- AspireStorage.AppHost - Proyek orkestrator yang dirancang untuk menyambungkan dan mengonfigurasi berbagai proyek dan layanan aplikasi Anda. Orkestrator harus dijadikan sebagai proyek awal.
- AspireStorage.ServiceDefaults - Pustaka kelas bersama untuk menyimpan kode yang dapat digunakan kembali di seluruh proyek dalam solusi Anda.
- AspireStorage.Web - Proyek BlazorServer yang berfungsi sebagai antarmuka depan dari aplikasi Anda.
Menambahkan proyek Worker Service
Selanjutnya, tambahkan proyek Worker Service ke solusi untuk mengambil dan memproses pesan saat ditambahkan ke antrian penyimpanan Azure.
- Di penjelajah solusi, klik kanan pada tingkat atas node solusi AspireStorage dan pilih Tambahkan>Proyek baru.
- Cari dan pilih templat Worker Service dan pilih Berikutnya.
- Untuk nama proyek , masukkan AspireStorage.WorkerService dan pilih Berikutnya.
- Pada layar informasi tambahan:
- Pastikan .NET 9.0 dipilih.
- Pastikan daftar di .NET.NET Aspire orkestrasi dicentang dan pilih Buat.
Visual Studio menambahkan proyek ke solusi Anda dan memperbarui file Program.cs proyek AspireStorage.AppHost dengan baris kode baru:
builder.AddProject<Projects.AspireStorage_WorkerService>(
"aspirestorage-workerservice");
Visual Studio telah menambahkan baris kode ini untuk mendaftarkan proyek baru Anda dengan objek IDistributedApplicationBuilder, yang memungkinkan fitur orkestrasi. Untuk informasi selengkapnya, lihat gambaran umum orkestrasi .NET.NET Aspire.
Struktur solusi yang telah selesai harus menyerupai berikut ini:
Menambahkan integrasi .NET Aspire ke aplikasi Blazor
Tambahkan integrasi .NET AspireAzure Blob Storage dan paket integrasi Queue Storage .NET AspireAzure ke proyek Anda AspireStorage.Web.
dotnet add package Aspire.Azure.Storage.Blobs
dotnet add package Aspire.Azure.Storage.Queues
Proyek AspireStorage.Web Anda sekarang telah disiapkan untuk siap menggunakan integrasi .NET.NET Aspire. Berikut adalah file AspireStorage.Web.csproj yang telah diperbarui:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AspireStorage.ServiceDefaults\AspireStorage.ServiceDefaults.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Aspire.Azure.Storage.Blobs" Version="9.1.0" />
<PackageReference Include="Aspire.Azure.Storage.Queues" Version="9.1.0" />
</ItemGroup>
</Project>
Langkah selanjutnya adalah menambahkan integrasi ke aplikasi.
Di dalam file Program.cs dari proyek AspireStorage.Web, tambahkan panggilan ke metode ekstensi AddAzureBlobClient dan AddAzureQueueClient setelah pembuatan builder
tetapi sebelum panggilan ke AddServiceDefaults
. Untuk informasi selengkapnya, lihat default layanan .NET.NET Aspire. Berikan nama string koneksi Anda sebagai parameter.
using AspireStorage.Web;
using AspireStorage.Web.Components;
using Azure.Storage.Blobs;
using Azure.Storage.Queues;
var builder = WebApplication.CreateBuilder(args);
builder.AddAzureBlobClient("BlobConnection");
builder.AddAzureQueueClient("QueueConnection");
// Add service defaults & Aspire components.
builder.AddServiceDefaults();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddOutputCache();
builder.Services.AddHttpClient<WeatherApiClient>(client =>
{
// This URL uses "https+http://" to indicate HTTPS is preferred over HTTP.
// Learn more about service discovery scheme resolution at https://aka.ms/dotnet/sdschemes.
client.BaseAddress = new("https+http://apiservice");
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
else
{
// In development, create the blob container and queue if they don't exist.
var blobService = app.Services.GetRequiredService<BlobServiceClient>();
var docsContainer = blobService.GetBlobContainerClient("fileuploads");
await docsContainer.CreateIfNotExistsAsync();
var queueService = app.Services.GetRequiredService<QueueServiceClient>();
var queueClient = queueService.GetQueueClient("tickets");
await queueClient.CreateIfNotExistsAsync();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseOutputCache();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.MapDefaultEndpoints();
app.Run();
using AspireStorage.Web;
using AspireStorage.Web.Components;
using Azure.Storage.Blobs;
using Azure.Storage.Queues;
var builder = WebApplication.CreateBuilder(args);
builder.AddAzureBlobClient("BlobConnection");
builder.AddAzureQueueClient("QueueConnection");
// Add service defaults & Aspire components.
builder.AddServiceDefaults();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddOutputCache();
builder.Services.AddHttpClient<WeatherApiClient>(client =>
{
// This URL uses "https+http://" to indicate HTTPS is preferred over HTTP.
// Learn more about service discovery scheme resolution at https://aka.ms/dotnet/sdschemes.
client.BaseAddress = new("https+http://apiservice");
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseOutputCache();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.MapDefaultEndpoints();
app.Run();
Dengan pernyataan using
tambahan, metode ini menyelesaikan tugas-tugas berikut:
- Daftarkan Azure.Storage.Blobs.BlobServiceClient dan Azure.Storage.Queues.QueueServiceClient dengan kontainer DI untuk menyambungkan ke Azure Storage.
- Aktifkan pemeriksaan kesehatan, pengelogan, dan telemetri yang sesuai secara otomatis untuk layanan masing-masing.
Ketika proyek
Menambahkan integrasi .NET Aspire ke Worker Service
Layanan pekerja menangani penarikan pesan dari antrean Azure Storage untuk diproses. Tambahkan paket integrasi integrasi
dotnet add package Aspire.Azure.Storage.Queues
Dalam file Program.cs untuk proyek AspireStorage.WorkerService, tambahkan panggilan ke metode ekstensi AddAzureQueueClient setelah membuat builder
tetapi sebelum memanggil AddServiceDefaults
:
using AspireStorage.WorkerService;
var builder = Host.CreateApplicationBuilder(args);
builder.AddAzureQueueClient("QueueConnection");
builder.AddServiceDefaults();
builder.Services.AddHostedService<WorkerService>();
var host = builder.Build();
host.Run();
Metode ini menangani tugas-tugas berikut:
- Daftarkan QueueServiceClient di dalam kontainer DI untuk menghubungkan ke Azure Storage Queues.
- Aktifkan pemeriksaan kesehatan, pengelogan, dan telemetri yang sesuai secara otomatis untuk layanan masing-masing.
Membuat formulir
Aplikasi ini memerlukan formulir agar pengguna dapat mengirimkan informasi tiket dukungan dan mengunggah lampiran. Aplikasi ini mengunggah file terlampir pada properti Document
(IFormFile) ke Azure Blob Storage menggunakan BlobServiceClientyang disuntikkan .
QueueServiceClient mengirim pesan yang terdiri dari Title
dan Description
ke Antrean Penyimpanan Azure.
Gunakan markup Razor berikut untuk membuat formulir dasar, menggantikan konten file
@page "/"
@using System.ComponentModel.DataAnnotations
@using Azure.Storage.Blobs
@using Azure.Storage.Queues
@inject BlobServiceClient BlobClient
@inject QueueServiceClient QueueServiceClient
<PageTitle>Home</PageTitle>
<div class="text-center">
<h1 class="display-4">Request Support</h1>
</div>
<EditForm Model="@Ticket" FormName="Tickets" method="post"
OnValidSubmit="@HandleValidSubmit" enctype="multipart/form-data">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="mb-4">
<label>Issue Title</label>
<InputText class="form-control" @bind-Value="@Ticket.Title" />
<ValidationMessage For="() => Ticket.Title" />
</div>
<div class="mb-4">
<label>Issue Description</label>
<InputText class="form-control" @bind-Value="@Ticket.Description" />
<ValidationMessage For="() => Ticket.Description" />
</div>
<div class="mb-4">
<label>Attachment</label>
<InputFile class="form-control" name="Ticket.Document" />
<ValidationMessage For="() => Ticket.Document" />
</div>
<button class="btn btn-primary" type="submit">Submit</button>
<button class="btn btn-danger mx-2" type="reset" @onclick=@ClearForm>Clear</button>
</EditForm>
@code {
[SupplyParameterFromForm(FormName = "Tickets")]
private SupportTicket Ticket { get; set; } = new();
private async Task HandleValidSubmit()
{
var docsContainer = BlobClient.GetBlobContainerClient("fileuploads");
// Upload file to blob storage
await docsContainer.UploadBlobAsync(
Ticket.Document.FileName,
Ticket.Document.OpenReadStream());
// Send message to queue
var queueClient = QueueServiceClient.GetQueueClient("tickets");
await queueClient.SendMessageAsync(
$"{Ticket.Title} - {Ticket.Description}");
ClearForm();
}
private void ClearForm() => Ticket = new();
private class SupportTicket()
{
[Required] public string Title { get; set; } = default!;
[Required] public string Description { get; set; } = default!;
[Required] public IFormFile Document { get; set; } = default!;
}
}
Untuk informasi selengkapnya tentang membuat formulir di Blazor, lihat gambaran umum formulir ASP.NET CoreBlazor.
Memperbarui AppHost
Proyek AspireStorage.AppHost adalah orkestrator untuk aplikasi Anda. Ini bertanggung jawab untuk menghubungkan dan mengonfigurasi berbagai proyek dan layanan aplikasi Anda. Orkestrator harus dijadikan sebagai proyek awal.
Untuk menambahkan dukungan Azure Storage hosting ke IDistributedApplicationBuilderAnda, instal paket 📦Aspire.Hosting.Azure.Storage NuGet.
dotnet add package Aspire.Hosting.Azure.Storage
Ganti konten file
using Microsoft.Extensions.Hosting;
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("Storage");
if (builder.Environment.IsDevelopment())
{
storage.RunAsEmulator();
}
var blobs = storage.AddBlobs("BlobConnection");
var queues = storage.AddQueues("QueueConnection");
var apiService = builder.AddProject<Projects.AspireStorage_ApiService>("apiservice");
builder.AddProject<Projects.AspireStorage_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithReference(blobs)
.WithReference(queues);
builder.AddProject<Projects.AspireStorage_WorkerService>("aspirestorage-workerservice")
.WithReference(queues);
builder.Build().Run();
Kode sebelumnya menambahkan penyimpanan, blob, dan antrean Azure, dan saat dalam mode pengembangan, kode tersebut menggunakan emulator. Setiap proyek mendefinisikan referensi untuk sumber daya ini yang bergantung padanya.
using Microsoft.Extensions.Hosting;
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("Storage");
var blobs = storage.AddBlobs("BlobConnection");
var queues = storage.AddQueues("QueueConnection");
var apiService = builder.AddProject<Projects.AspireStorage_ApiService>("apiservice");
builder.AddProject<Projects.AspireStorage_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithReference(blobs)
.WithReference(queues);
builder.AddProject<Projects.AspireStorage_WorkerService>("aspirestorage-workerservice")
.WithReference(queues);
builder.Build().Run();
Kode sebelumnya menambahkan penyimpanan, blob, dan antrean Azure, dan menentukan referensi untuk sumber daya ini dalam setiap proyek yang bergantung padanya.
Memproses barang dalam antrean
Saat pesan baru ditempatkan pada antrean tickets
, layanan pekerja harus mengambil, memproses, dan menghapus pesan tersebut. Perbarui kelas Worker.cs, ganti konten dengan kode berikut:
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
namespace AspireStorage.WorkerService;
public sealed class WorkerService(
QueueServiceClient client,
ILogger<WorkerService> logger) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var queueClient = client.GetQueueClient("tickets");
await queueClient.CreateIfNotExistsAsync(cancellationToken: stoppingToken);
while (!stoppingToken.IsCancellationRequested)
{
QueueMessage[] messages =
await queueClient.ReceiveMessagesAsync(
maxMessages: 25, cancellationToken: stoppingToken);
foreach (var message in messages)
{
logger.LogInformation(
"Message from queue: {Message}", message.MessageText);
await queueClient.DeleteMessageAsync(
message.MessageId,
message.PopReceipt,
cancellationToken: stoppingToken);
}
// TODO: Determine an appropriate time to wait
// before checking for more messages.
await Task.Delay(TimeSpan.FromSeconds(15), stoppingToken);
}
}
}
Sebelum layanan pekerja dapat memproses pesan, layanan tersebut harus dapat tersambung ke antrean penyimpanan Azure. Dengan Azurite, Anda perlu memastikan bahwa antrean pesan tersedia sebelum layanan pekerja mulai menjalankan pemrosesan antrean pesan.
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
namespace AspireStorage.WorkerService;
public sealed class WorkerService(
QueueServiceClient client,
ILogger<WorkerService> logger) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var queueClient = client.GetQueueClient("tickets");
while (!stoppingToken.IsCancellationRequested)
{
QueueMessage[] messages =
await queueClient.ReceiveMessagesAsync(
maxMessages: 25, cancellationToken: stoppingToken);
foreach (var message in messages)
{
logger.LogInformation(
"Message from queue: {Message}", message.MessageText);
await queueClient.DeleteMessageAsync(
message.MessageId,
message.PopReceipt,
cancellationToken: stoppingToken);
}
// TODO: Determine an appropriate time to wait
// before checking for more messages.
await Task.Delay(TimeSpan.FromSeconds(15), stoppingToken);
}
}
}
Layanan pekerja memproses pesan dengan menghubungkan ke antrean penyimpanan Azure, dan mengambil pesan dari antrean tersebut.
Layanan pekerja memproses pesan dalam antrean dan menghapusnya saat telah diproses.
Mengonfigurasi string koneksi
Proyek
Dalam proyek AspireStorage, tambahkan konfigurasi berikut ke file
appsettings.Development.json
:"ConnectionStrings": { "BlobConnection": "https://<your-storage-account-name>.blob.core.windows.net/", "QueueConnection": "https://<your-storage-account-name>.queue.core.windows.net/" }
Dalam proyek
AspireStorage.Worker, tambahkan konfigurasi berikut ke file : "ConnectionStrings": { "QueueConnection": "https://<your-storage-account-name>.queue.core.windows.net/" }
Menjalankan dan menguji aplikasi secara lokal
Aplikasi sampel sekarang siap untuk pengujian. Verifikasi bahwa data formulir yang dikirimkan dikirim ke Azure Blob Storage dan Azure Queue Storage dengan menyelesaikan langkah-langkah berikut:
Tekan tombol jalankan di bagian atas Visual Studio untuk meluncurkan dasbor proyek .NET Aspire Anda di browser.
Pada halaman sumber daya, di baris aspirestorage.web, klik tautan di kolom Titik Akhir untuk membuka UI aplikasi Anda.
Masukkan data sampel ke bidang formulir
Title
danDescription
dan pilih file sederhana untuk diunggah.Pilih tombol Kirim, dan formulir mengirimkan tiket dukungan untuk diproses — dan menghapus formulir.
Di tab browser terpisah, gunakan portal Azure untuk menavigasi ke browser Storage di Akun Penyimpanan Azure Anda.
Pilih Kontainer lalu masuk ke kontainer Dokumen untuk melihat file yang diunggah.
Anda dapat memverifikasi apakah pesan pada antrean sudah diproses dengan melihat log Project pada dasbor .NET.NET Aspire, dan memilih aspirestorage.workerservice dari menu dropdown.
Ringkasan
Contoh aplikasi yang Anda buat menunjukkan penyimpanan blob dari ASP.NET CoreBlazor Web App dan pemrosesan antrean dalam .NET Worker Service. Aplikasi Anda terhubung ke Azure Storage menggunakan integrasi .NET Aspire. Aplikasi mengirimkan tiket dukungan ke antrean untuk diproses dan mengunggah lampiran ke penyimpanan.
Karena Anda memilih untuk menggunakan Azurite, Anda tidak perlu membersihkan sumber daya ini ketika Anda selesai mengujinya, saat Anda membuatnya secara lokal dalam konteks emulator. Emulator memungkinkan Anda menguji aplikasi secara lokal tanpa dikenakan biaya apa pun, karena tidak ada sumber daya Azure yang disediakan atau dibuat.
Membersihkan sumber daya
Jalankan perintah CLI Azure berikut untuk menghapus grup sumber daya saat Anda tidak lagi memerlukan sumber daya Azure yang Anda buat. Menghapus grup sumber daya juga menghapus sumber daya yang terkandung di dalamnya.
az group delete --name <your-resource-group-name>
Untuk informasi selengkapnya, lihat Membersihkan sumber daya di Azure.
.NET Aspire